Perl中的模式匹配详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
perl中的模式匹配
俞昊然
俞昊然
发表于2016-05-10 19:57:29
内容来源:网络
perl模式匹配常采用m/target/的形式,其中target为需要匹配的字符串。如果不显示指明,则perl常常在$_中进行匹配。
模式匹配运算符常常用m//代替,也可以用(m,target)代替。
如果匹配的字符串中含有元字符,则需要在前面加上/。
--------------------------------------------------------------------------------------------------------------------------------
perl正则表达式匹配的规则:
1通常情况下,模式匹配从目标字符串的左边开始,然后逐步向右边进行匹配。
2如果并且只有当整个模式能够用于与目标字符串相匹配时,模式匹配才返回真(在任何上下文中均如此)。
3目标字符串中第一个能够匹配的字符串首先进行匹配。正则表达式不会漏掉某一个能够
匹配的字符串,而去寻找另一个更远的字符串来进行匹配。
4进行第一次最大字符数量的匹配。你的正则表达式可能迅速找到一个匹配的模式,然后
设法尽可能延伸能够匹配的字符范围。正则表达式是“贪婪的”,也就是说,它会尽可
能多地寻找能够匹配的字符。
---------------------------------------------------------------------------------------------------------------------------------
元字符介绍:
圆点.:在正则表达式中,圆点用于匹配除了换行符外的任何单个字。要求存在一个字符,但是不能有更多的字符。如在模式/p.t/用于匹配pot、pat、pit、carpet等
通配符+:+用于使前面的字符与后面的字符至少匹配一次,也可以任意次地进行匹配,并且仍然拥有匹配的表达式。例如/do+g/能同时匹配hounddog,hotdog,doogiehowser,doooooogdoog等
通配符*:元字符*使得前面的字符可以进行0次或多次匹配。
元字符?:元字符?用于使前面的字符进行0次或一次匹配(但是不能超过一次)。注意是前面的字符。模式/c?ola/用于对c进行匹配,如果c存在的话。然后对o、l和a进行匹配。通配符{}:花括号的格式如下:pat{n, m},这里的n是匹配的最小次数,m是匹配的最大次数,pat是你试图量化匹配的字符或字符组。可以省略n,也可以省略m,但是不能同时省略n和m。
例子:/ x { 5,10}/ x至少出现5次,但是不超过10次。
/ x { 9,} / x至少出现9次,也可能出现更多次。
/ x { 0,4 } / x最多出现4次,也可能根本不出现。
/ x { 8 } / x必须正好出现8次,不能多,也不能少。
通配符 .*:可以用它来匹配任何东西,通常是你感兴趣的其他两样东西之间的任何东西。例如/first.*last/,这个模式设法匹配单词first,再匹配它后面的任何东西,然后匹配单词last。
字符类
----------------------------------------------------------------------------------------------------------------------------------
字符类说明
[ 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 一个非白空间字符
------------------------------------------------------------------------------------------------------------------------------------
分组和选择和位置通配符:
()表示分组。
| 表示选择。
位置通配符:
第一个位置通配符是插入记号(^)。正则表达式开头的插入记号告诉正则表达式只匹配一行开头的字符。
是美元符号($)。正则表达式结尾处的美元符号能够使模式只匹配一行结尾的字符。
特别注意:记号(^)由2种用法,区别如下:
字符匹配的时候,通常是在[]里内容的前面加^符号,表示该字符类可以匹配不在该字符类中的任何单个字符,也就是匹配非该字符的意思。
位置匹配的时候,通常是在//中内容的前面加^符号,表示只匹配以正则表达式开头的行。例子: