本文和大家重点讨论一下Perl模式匹配中的特殊字符的用法,比如说“+”,+用于使前面的字符与后面的字符至少匹配一次,也可以任意次地进行匹配。
Perl模式匹配中的特殊字符
1.1"+"
+用于使前面的字符与后面的字符至少匹配一次,也可以任意次地进行匹配。类似于windows中*例如/d+g/能匹配的dog,dogg,dooooog/ab+/在字符串abbc中匹配的将是abb,而不是ab。
1.2[]和[^]
[]意味着匹配一组字符中的一个
^表示除其之外的所有字符
例如/w[abcd]s/能匹配的was,wbs,wcs,wds
/w[^ab]s/不能匹配的was,wbs
也可以写成如下形式
/w[a-z0-9A-Z]s/
1.3字符*和?
它们与+类似,区别在于*匹配0个、1个或多个相同字符,?匹配0个或1个该字符。
例如/de*f/匹配df、def、deeeef等;/de?f/匹配df或def。
1.4位置通配符(锚模式)
^或\A仅匹配串首
$或\Z仅匹配串尾
\b匹配单词边界
\B单词内部匹配
例如:/^def/只匹配以def打头的字符串,/$def/只匹配以def结尾的字符串,结合起来的/^def$/只匹配字符串def(?)。\A和\Z在多行匹配时与^和$不同。
\b在单词边界匹配:/\bdef/匹配def和defghi等以def打头的单词,但不匹配abcdef。/def\b/匹配def和abcdef等以def结尾的单词,但不匹配defghi,/\bdef\b/只匹配字符串def。注意:/\bdef/可匹配$defghi,因为$并不被看作是单词的部分。
\B在单词内部匹配:/\Bdef/匹配abcdef等,但不匹配def;/def\B/匹配defghi等;/\Bdef\B/匹配cdefg、abcdefghi等,但不匹配def,defghi,abcdef。
1.5Perl模式匹配中字符转义类
\d任意数字[0-9]
\D除数字外的任意字符[^0-9]
\w任意单词字符[_0-9a-zA-Z]
\W任意非单词字符[^_0-9a-zA-Z]
\s空白[\r\t\n\f]
\S非空白[^\r\t\n\f]
1.6"."
字符"."匹配除换行外的所有字符,通常与*合用。
1.7Perl模式匹配中匹配指定数目的字符
字符对{}指定所匹配字符的出现次数。
如:/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之间。
1.8指定选项
字符"|"指定两个或多个选择来匹配模式。如:/def|ghi/匹配def或ghi。
这些转义符有一定的操作顺序:
()模式内存
+*?{}出现次数
^$\b\B锚
|选项
1.9Perl模式匹配中模式次序变量
在Perl模式匹配后调用重用部分的结果可用变量$n,全部的结果用变量$&。
$string="Thisstringcontainsthenumber25.11.";
$string=~/-?(\d+)\.?(\d+)/;#匹配结果为25.11
$integerpart=$1;#now$integerpart=25
$decimalpart=$2;#now$decimalpart=11
$totalpart=$&;#nowtotalpart=25.11
【编辑推荐】