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

[经验分享] perl:正则表达式部分

[复制链接]

尚未签到

发表于 2018-8-31 09:50:20 | 显示全部楼层 |阅读模式
  使用简单模式匹配
  若模式匹配的对象是$_的内容,只要把模式写在一对(/)中就可以了。
  


  • #$_="yabba dabba doo";
  • #if (/abba/){
  • #print "it matched!\n";
  • #}
  

  unicode属性
  若要匹配某项属性,只需要把属性名放入\p{PROPERTY}里面。比如有许多字符属于空白符,相应的属性名为Space,要匹配这类的字符可以
  


  • if(/\p{Space}/) {
  •   print "The string has some whitespace.\n";
  • }
  

  若要匹配数字,可以用Digit属性
  


  • if(/\p{Digit}/){
  •   print "The string has a digit.\n";
  • }
  

  把小写的p改成大写P,就表示否定意义,匹配指定属性意外的字符。
  元字符
  点号(.)是能匹配任意一个字符的通配符,换行符不能匹配。如果希望点号仅匹配他本身,则在他前面加上反斜线。即任何元字符前面加上反斜线,就会使它失去元字符的特殊作用。反斜线是我们的第二个元字符,要匹配真正的反斜线,请用两个反斜线表示。
  


  • $_='a real \\ backslash';
  • if(/\\/){
  •     print "It matched!\n";
  • }

  

  简单的量词
  星号(*)用来匹配前面的条目出现零次或多次的情况。点号星号(.*)组合起来可以匹配任意字符零到无限次。加号(+)会匹配前一个条目一次以上,以及匹配空格。问号(?)匹配前一个条目出现一次或者不出线。
  模式分组
  在正则表达式中,()的作用是对字符串分组,()也是元字符。/fred+/匹配的是freddddd,/(fred)+/匹配的是fredfredfredfred,/(fred)*/匹配的是任意字符。
  


  • $_="abba";
  • if (/(.)\1/)
  •    #if(/(.)(.)/)
  • {
  •   print "It matched some character next to itself!\n";
  •   }

  

  反向引用不必紧接在对应的捕获组括号后面。下面的模式会匹配y后面的4个连续的非换行符,并用\1反向引用表示匹配d后也出现这4个字符的情况。
  


  • $_="abba dabba doo";
  •   if(/y(....) d\1/)
  •       #if(/y(....) d(....)/)
  •      {
  •      print "It matched the same after y and d!\n";
  •     }
  

  也可以用多个括号来分成多组,每个组都可以有自己的反向引用。
  


  • $_="yabba dabba doo";
  • if (/y(.)(.)\2\1/)
  •   #if(/y(.)(.)(..)(.)/)
  •   {
  •     print "It matched after the y!\n";
  •    }
  

  下面这种情况perl匹配的是\1,\11还是\111呢?
  


  • use 5.010;
  • $_="aa11bb";
  • if(/(.)\111/)
  • {
  •   print "It matched!\n";
  •   }
  

  perl会认为是\111,那么如何避免呢?
  


  • use 5.010;
  • $_="aa11bb";
  • if (/(.)\g{1}11)/{
  •     print "It maatched!\n";
  •    }
  




运维网声明 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-559229-1-1.html 上篇帖子: Perl Learning - 9 (printf, filehandle, open, close) 下篇帖子: Perl Learning - 10 (hash)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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