设为首页 收藏本站
查看: 905|回复: 0

[经验分享] perl 正则表达式之匹配

[复制链接]

尚未签到

发表于 2015-12-27 12:23:52 | 显示全部楼层 |阅读模式
  一、用m//进行匹配
  上篇用双斜线的写法表示模式,事实上是m//的简写,所谓简写,就是当用双斜线作为定界符的时候,可有省略开头的m。
  不使用简写的时候,可以使用任何定界符表示模式,m()、m<>、m!!等等
  二、模式匹配修饰符
  perl的模式匹配修饰符,有时也叫flag,是追加在模式表达式末尾定界符后面的字母,用来改变默认的行为
  /i  进行大小写无关的匹配
  /s 匹配任意字符,会将模式中的点号转换成字符集[\d\D]来处理,使其匹配任何字符,包括换行
  /x 插入空白符,可有在模式中插入空白,perl会将空白和注释(注释部分别使用定界符)直接忽略,使用空白时,需要在前面加上反斜线,或使用\t、\s、\s+、\s*
  /a  使用ASICC解释字符
  /u  使用Unicode解释字符
  /l   用本地化语言的设定来解释字符
  /m 对多行进行匹配
  其他修饰符可以参阅perlop中有关m//部分
  组合选项时,只要将他们一起写在模式末尾



$_ = "I saw Barney \ndown at the bowling alley \nwith Fred\nlast night\n";
if(/Barney.*Fred/s){
print "has s yes \n";
}
if(/Barney.*Fred/){
print "no s yes \n";
}
  三、锚位
  通过给定锚位,让模式仅在字符串指定位置匹配
  \A 匹配字符串的绝对开头
  \z 匹配字符串 的绝对末尾
  \Z 允许字符串后面有换行符
  ^  在字符集外面时,表示字符串开头,无/m时,同\A
  $  字符串末尾
  \b 单词边界符,这里的单词指由英文字母,数字,下划线组成的字符,即匹配一组连续的\w字符的开头或结尾
  \B 非单词边界



$_ = 'http://www.baidu.com';
if(m{\AHttps?://}i){
print "yes \n";
}


$_ = 'that is a word boooo ';
if(/\bwor/){
print "1 \n";
}
if(/\bwor\b/){
print "2 \n";
}
if(/\bword\b/){
print "3 \n";
}
if(/\bword\B/){
print "4 \n";
}
  四、绑定操作符=~
  默认匹配的操作对象是$_,绑定操作符使操作对象为操作符左边的字符串
  正则表达式内部可以进行引号形式的内插
  五、捕获变量
  模式中出现圆括号的地方会触发正则表达的是引擎捕获匹配到的字符串,并保存在捕获变量中,即$1,$2。。。模式中有多少圆括号,就有多少捕获变量可以用
  六、不捕获模式(?:)
  七、命名捕获(?<LABLE>PATTERN)
  捕获到的内容会保存在特殊哈希%+里,访问时用$+{LABLE}
  反向引用\g{LABLE}或\k<LABLE>



my $name = 'Fred flintstone and Barney flintstone';
if($name =~ /(?<lastname>\w+) (?:and|or) \w+ \k<lastname>/){
print "i saw $+{lastname}\n";
}
  八、自动捕获变量
  $`    $&    $'
  ${^PREMATCH}     ${^MATCH}    ${POSTMATCH}



if('hello there, neighbor' =~ /\s(\w+),/){
print "that was ($`)($&)($') \n";
print "that was (${^PREMATCH})(${^MATCH})(${^POSTMATCH}) \n";
}
  九、通用量词{m,n}
  {0,}     *
  {1,}     +
  {0,1}   ?
  十、优先级
  圆括号(分组或捕获)    (...),(?:...),(?<LABLE>PATTEN...)
  量词                       a*,a+,a?,a{m,n}
  锚位和序列               abc, ^,$,\A,\z,\Z
  择一竖线                 a|b|c
  原子                       a,[abc],\d,\1,\g{2}
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156932-1-1.html 上篇帖子: 分享:perl 文件操作总结 下篇帖子: perl--单元测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表