perl中的模式匹配

来源:互联网 发布:nosql数据库的缺点 编辑:程序博客网 时间:2024/05/14 19:01

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/