您的位置:首页 > 其它

perl中的模式匹配

2014-09-26 13:14 239 查看
perl模式匹配常采用m/target/的形式,其中target为需要匹配的字符串。如果不显示指明,则perl常常在$_中进行匹配。

模式匹配运算符常常用m//代替,也可以用(m,target)代替。

如果匹配的字符串中含有元字符,则需要在前面加上/。

perl正则表达式匹配的规则:
1.• 通常情况下,模式匹配从目标字符串的左边开始,然后逐步向右边进行匹配。
2• 如果并且只有当整个模式能够用于与目标字符串相匹配时,模式匹配才返回真(在任何上下文中均如此)。
3• 目标字符串中第一个能够匹配的字符串首先进行匹配。正则表达式不会漏掉某一个能够

匹配的字符串,而去寻找另一个更远的字符串来进行匹配。
4 • 进行第一次最大字符数量的匹配。你的正则表达式可能迅速找到一个匹配的模式,然后

设法尽可能延伸能够匹配的字符范围。正则表达式是“贪婪的”,也就是说,它会尽可

能多地寻找能够匹配的字符。


元字符介绍:

圆点:在正则表达式中,圆点用于匹配除了换行符外的任何单个字。’要求存在一个字符,但是不能有更多的字符。如在模式/ p . t/用于匹配p o t、p a t、p i t、c a rp e t等
通配符+:+用于使前面的字符与后面的字符至少匹配一次,也可以任意次地进行匹配,并且仍然拥有匹配的表达式。例如/ d o + g /能同时匹配h o u n dd o g,h o td o g,d o o gie howser,d o o o o o og d o o g
通配符*:元字符*使得前面的字符可以进行0次或多次匹配
元字符?:元字符?用于使前面的字符进行0次或一次匹配(但是不能超过一次)。注意是前面的字符。模式/ c ? o l a /用于对c进行匹配,如果c存在的话。然后对o、l和a进行匹配
通配符{}:花括号的格式如下:

p a t{n, m}
这里的n是匹配的最小次数,m是匹配的最大次数,p a t是你试图量化匹配的字符或字符组。可以省略n,也可以省略m,但是不能同时省略n和m。

例子:/ x { 5,10}/ x至少出现5次,但是不超过1 0次。

/ x { 9,} / x至少出现9次,也可能出现更多次。

/ x { 0,4 } / x最多出现4次,也可能根本不出现。

/ x { 8 } / x必须正好出现8次,不能多,也不能少。
通配符是. *。

可以用它来匹配任何东西,通常是你感兴趣的其他两样东西之间的任何东西。例如/ f i r s t . * l a s t /。这个模式设法匹配单词f i r s t,再匹配它后面的任何东西,然后匹配单词l a s t。

字符类:
------------------------------------------------------------------------------------------------------
字符类 说明
[ a b c d e ] 用于匹配a、b、c、d或e中的任何一个字符

[ a - e ] 与上面相同。用于匹配a、b、c、d或e中的任何一个字符

G 用于匹配大写字母G或小写字母g

[ 0 - 9 ] 用于匹配一个数字

[ 0 - 9 ] + 用于顺序匹配一个或多个数字

[ A - Z a - z ] { 5 } 用于匹配任何一组5个字母字符

[ *!@ # $ % & ( ) ] 用于匹配这些符号中的任何一个
----------------------------------------------------------------------------------------------------------------
记号( ^):该字符类可以匹配不在该字符类中的任何单个字符

特殊字符类:
----------------------------------------------------------------------------------------
模式 用于匹配

/ w 一个单词字符,与[ a - z A - z 0 - 9 ]相同

/ W 一个非单词字符(与/ w相反)

/ d 一个数字,与[ 0 - 9 ]相同

/ D 一个非数字

/ s 一个白空间字符,与[ / t / f / r / n ]相同

/ S 一个非白空间字符
------------------------------------------------------------------------------------------


分组和选择和位置通配符:
()表示分组,|表示选择。
位置通配符:
第一个位置通配符是插入记号( ^)。正则表达式开头的插入记号告诉正则表达式只匹配一行开头的字符。
是美元符号( $)。正则表达式结尾处的美元符号能够使模式只匹配一行结尾的字符。

注意(^)与字符前前面的该符号的区别,字符匹配的时候通常是[]里面加^符号。而位置的^是在//内容的前面
例子:
/ ^ H e l p / 只只匹配以H e l p开头的行

/ ^ F r a n k l y. * d a r n $ / 只用于匹配以F r a n k l y开头和以d a r n结尾的行。它们中间的所有字符也进行匹配

替换操作符:
语法: s/search/repleace/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: