Perl学习笔记(002)

本文通过实例详细介绍了正则表达式的基本用法,包括贪婪与非贪婪匹配、特殊字符的使用及如何处理字符串的截取等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在猜数字游戏中:
      (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。往后跳了一下。
             ~是匹配的意思。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值