Perl中的模式匹配学习笔记

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

     if ($varname =~ /^$[A-Za-z][_0-9a-zA-Z]*$/) {
       print ("$varname is a legal scalar variablen");
     } elsif ($varname =~ /^@[A-Za-z][_0-9a-zA-Z]*$/) {
       print ("$varname is a legal array variablen");
     } elsif ($varname =~ /^[A-Za-z][_0-9a-zA-Z]*$/) {
       print ("$varname is a legal file variablen");
     } else {
       print ("I don't understand what $varname is.n");
    }

例3:b在单词边界匹配:/bdef/匹配def和defghi等以def打头的单词,但不匹配abcdef。/defb/匹配def和 abcdef等以def结尾的单词,但不匹配defghi,/bdefb/只匹配字符串def。注意:/bdef/可匹配$defghi,因为$并不被看作是单词的部分。
例4:B在单词内部匹配:/Bdef/匹配abcdef等,但不匹配def;/defB/匹配defghi等;/BdefB/匹配cdefg、abcdefghi等,但不匹配def,defghi,abcdef。
7、模式中的变量替换 
   将句子分成单词:
     $pattern = "[t ]+";
     @words = split(/$pattern/, $line);
8、字符范围转义
转义字符 描述 范围
d 任意数字 [0-9]
D 除数字外的任意字符  [^0-9]
w 任意单词字符 [_0-9a-zA-Z]
W 任意非单词字符 [^_0-9a-zA-Z]
s 空白 [ rtnf]
S 非空白 [^ rtnf]
   例:/[da-z]/匹配任意数字或小写字母。
9、匹配任意字符 
   字符"."匹配除换行外的所有字符,通常与*合用。
10、匹配指定数目的字符 
   字符对{}指定所匹配字符的出现次数。如:/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等。