在猜数字游戏中:
(1)比如:$think=int(rand (10));#此rand()函数的意思是指取0-9这10个数字。如果要取1-10这0个数字的话就用 int(rand (10))+1;
(2)如果我输入字母的话,它也可以判断大小!无论我输入多长的字母,显示出来的结果都说才得 比较小。难道这就是我上次在递增递减中发现的字母字符在首位的话,此变量的值就默认为 -1。
哈哈哈~~我就先姑且这么认为吧~~
这个问题没有出现在简单的猜数字问题中,只是今天学习了自然语言的正则表达,正则语言和自动机。看到下面的式子很是熟悉,乍眼一看,原来正式正则表达式啊。。。
(3)问题1:如果字符串是">total number",只想要输出">total"。
一个正确回答:
$a=">total number";
if($a=~/^(\S+)/){
print $1;
}
问题2:如果字符串是">total number",只想输出"total number"。
一个错误回答:
$a="total number";
if($a=~/\>\s/){
print $a;
}
又一个错误回答:
$a=">total number";
if($a=~/\>(.*?)/){
print $1."\n";
}
一个正确回答:
$a=">total number";
if($a=~/\>(.*)/){rint $1;
print $1."\n";
}
又一个正确回答:
$a=">total number";
if($a=~/\>(.*?)$/){
print $1."\n";
}
当然直接替换也是行得通的。
$a=">total number";
if($a=~s/\>//){
print $1."\n";
}
注意: “ =”和“~”之间不能有空格。
"?"代表贪婪算法,如果在做匹配算法时,一定要加上"$"即表示一行的结束,它就不会一直继续匹配下去。只要匹配到一个符合条件的就行了。
如果$1在正则表达式外面,那么$1就代表正则表达式中()里面的内容。另外一种表述方式是:$a=~/\>(.*?)\1$/。\1也代表了()中的内容哦。
解释:$a中的 $是用来变量的。后面的$在自然语言处理这门学科中叫做锚号(anchor)。试想一下,锚是用来停船用的。所以这里表示一行的结尾。 / /代表正则表达式,表达式写在这里面。 ^ 叫做脱字符(caret),一般情况下是表示否定的意思,但是如果放到表达式的最前面,有三种意思:
(a)表示一行的开始;eg:/^The/ 表示:单词The只出现在一行的开始。
(b)在方括号内表示否定;eg:[^The ] 表示:句子中没有“The”这个单词。 做了个小实验,发现识别效果不如 \The。以后还是用反斜杠有把握一些,不然调试都不知道哪里出错了。
(c)仅仅表示脱字符本身。
\本身就具有否定的意思。但是\S含义更加特殊。当\后面加上D,W,S等大写字母以后有特殊的否定含义了。
(a) \D表示[^0-9] 即any non-digit,不表示任何数字。\d就表示任何数字咯。
(b) \W表示[^a-zA-Z0-9_ ] 即[^ \w],a non-alphanumeric。\w表示[a-zA-Z0-9_ ]即 any alphanumeric or underscore。
(c) \S表示[ \r \t \n \f ] ,non-whitespace。\s表示whitespace(space or tab)。 \r:回车到本行行首。 \t :制表符。简单点说,和\n相当于在程序中按了一下“Enter”回车键比较,\t 就相当于你在编程的时候按一下“Table”键, 使光标以8个字符为基准进行跳跃 。
\n:回车到下一行行首。 \f:在windows下,输出的居然是一个生物中代表男性的符号。。。额滴个神啊,有木有搞错啊!在linux下邮电难以解释了:按照正常的不做任何处理的输出,本来是,后一个结果会紧挨着前面的结果而显示出来。可是后面的那个结果在原来的位置上往后退了一排。也就是说:本来第一排第一列是A,第一排第二列是B。结果变成了第一排第一列是A,第 二排第二列是B。往后跳了一下。
~是匹配的意思。
(1)比如:$think=int(rand (10));#此rand()函数的意思是指取0-9这10个数字。如果要取1-10这0个数字的话就用 int(rand (10))+1;
(2)如果我输入字母的话,它也可以判断大小!无论我输入多长的字母,显示出来的结果都说才得 比较小。难道这就是我上次在递增递减中发现的字母字符在首位的话,此变量的值就默认为 -1。
哈哈哈~~我就先姑且这么认为吧~~
这个问题没有出现在简单的猜数字问题中,只是今天学习了自然语言的正则表达,正则语言和自动机。看到下面的式子很是熟悉,乍眼一看,原来正式正则表达式啊。。。
(3)问题1:如果字符串是">total number",只想要输出">total"。
一个正确回答:
$a=">total number";
if($a=~/^(\S+)/){
print $1;
}
问题2:如果字符串是">total number",只想输出"total number"。
一个错误回答:
$a="total number";
if($a=~/\>\s/){
print $a;
}
又一个错误回答:
$a=">total number";
if($a=~/\>(.*?)/){
print $1."\n";
}
一个正确回答:
$a=">total number";
if($a=~/\>(.*)/){rint $1;
print $1."\n";
}
又一个正确回答:
$a=">total number";
if($a=~/\>(.*?)$/){
print $1."\n";
}
当然直接替换也是行得通的。
$a=">total number";
if($a=~s/\>//){
print $1."\n";
}
注意: “ =”和“~”之间不能有空格。
"?"代表贪婪算法,如果在做匹配算法时,一定要加上"$"即表示一行的结束,它就不会一直继续匹配下去。只要匹配到一个符合条件的就行了。
如果$1在正则表达式外面,那么$1就代表正则表达式中()里面的内容。另外一种表述方式是:$a=~/\>(.*?)\1$/。\1也代表了()中的内容哦。
解释:$a中的 $是用来变量的。后面的$在自然语言处理这门学科中叫做锚号(anchor)。试想一下,锚是用来停船用的。所以这里表示一行的结尾。 / /代表正则表达式,表达式写在这里面。 ^ 叫做脱字符(caret),一般情况下是表示否定的意思,但是如果放到表达式的最前面,有三种意思:
(a)表示一行的开始;eg:/^The/ 表示:单词The只出现在一行的开始。
(b)在方括号内表示否定;eg:[^The ] 表示:句子中没有“The”这个单词。 做了个小实验,发现识别效果不如 \The。以后还是用反斜杠有把握一些,不然调试都不知道哪里出错了。
(c)仅仅表示脱字符本身。
\本身就具有否定的意思。但是\S含义更加特殊。当\后面加上D,W,S等大写字母以后有特殊的否定含义了。
(a) \D表示[^0-9] 即any non-digit,不表示任何数字。\d就表示任何数字咯。
(b) \W表示[^a-zA-Z0-9_ ] 即[^ \w],a non-alphanumeric。\w表示[a-zA-Z0-9_ ]即 any alphanumeric or underscore。
(c) \S表示[ \r \t \n \f ] ,non-whitespace。\s表示whitespace(space or tab)。 \r:回车到本行行首。 \t :制表符。简单点说,和\n相当于在程序中按了一下“Enter”回车键比较,\t 就相当于你在编程的时候按一下“Table”键, 使光标以8个字符为基准进行跳跃 。
\n:回车到下一行行首。 \f:在windows下,输出的居然是一个生物中代表男性的符号。。。额滴个神啊,有木有搞错啊!在linux下邮电难以解释了:按照正常的不做任何处理的输出,本来是,后一个结果会紧挨着前面的结果而显示出来。可是后面的那个结果在原来的位置上往后退了一排。也就是说:本来第一排第一列是A,第一排第二列是B。结果变成了第一排第一列是A,第 二排第二列是B。往后跳了一下。
~是匹配的意思。