Perl中的模式匹配学习笔记

2019-10-01 10:30:01丽君

13、转义和特定字符的执行次序 
   象操作符一样,转义和特定字符也有执行次序:
特殊字符 描述
() 模式内存
+ * ? {} 出现次数
^ $ b B 锚
| 选项
14、指定模式定界符
缺省的,模式定界符为反斜线/,但其可用字母m自行指定,如:
     m!/u/jqpublic/perl/prog1! 等价于//u/jqpublic/perl/prog1/
注:当用字母'作为定界符时,不做变量替换;当用特殊字符作为定界符时,其转义功能或特殊功能即不能使用。
15、模式次序变量
在模式匹配后调用重用部分的结果可用变量$n,全部的结果用变量$&。


     $string = "This string contains the number 25.11.";
     $string =~ /-?(d+).?(d+)/; # 匹配结果为25.11
     $integerpart = $1; # now $integerpart = 25
     $decimalpart = $2; # now $decimalpart = 11
     $totalpart = $&; # now totalpart = 25.11

四、模式匹配选项
选项 描述
g 匹配所有可能的模式
i 忽略大小写
m 将串视为多行
o 只赋值一次
s 将串视为单行
x 忽略模式中的空白

1、匹配所有可能的模式(g选项) 

   @matches = "balata" =~ /.a/g; # now @matches = ("ba", "la", "ta")
   匹配的循环:
   while ("balata" =~ /.a/g) {
     $match = $&;
     print ("$matchn");
   }
   结果为:

     ba
     la
     ta

   当使用了选项g时,可用函数pos来控制下次匹配的偏移:

     $offset = pos($string);
     pos($string) = $newoffset;

2、忽略大小写(i选项)例 
   /de/i 匹配de,dE,De和DE。
3、将字符串看作多行(m选项) 
   在此情况下,^符号匹配字符串的起始或新的一行的起始;$符号匹配任意行的末尾。
4、只执行一次变量替换例 


   $var = 1;
   $line = ;
   while ($var < 10) {
     $result = $line =~ /$var/o;
     $line = ;
     $var++;
   }

   每次均匹配/1/。
5、将字符串看作单行例 
   /a.*bc/s匹配字符串axxxxx nxxxxbc,但/a.*bc/则不匹配该字符串。
6、在模式中忽略空格 
   /d{2} ([W]) d{2} 1 d{2}/x等价于/d{2}([W])d{2}1d{2}/。