perl 模式匹配参数详解

2019-10-01 15:03:26刘景俊

   字符对{}指定所匹配字符的出现次数。如:/de{1,3}f/匹配def,deef和deeef;/de{3}f/匹配deeef;/de{3,}f/匹配不少于3个e在d和f之间;/de{0,3}f/匹配不多于3个e在d和f之间。
11、指定选项
   字符"|"指定两个或多个选择来匹配模式。如:/def|ghi/匹配def或ghi。
   例:检验数字表示合法性
   if ($number =~ /^-?d+$|^-?0[xX][da-fa-F]+$/) {
     print ("$number is a legal integer.n");
   } else {
     print ("$number is not a legal integer.n");
   }
   其中 ^-?d+$ 匹配十进制数字,^-?0[xX][da-fa-F]+$ 匹配十六进制数字。
12、模式的部分重用
   当模式中匹配相同的部分出现多次时,可用括号括起来,用n来多次引用,以简化表达式:
/d{2}([W])d{2}1d{2}/ 匹配:
     12-05-92
     26.11.87
     07 04 92等
   注意:/d{2}([W])d{2}1d{2}/ 不同于/(d{2})([W])121/ ,后者只匹配形如17-17-17的字符串,而不匹配17-05-91等。
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