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

[经验分享] perl常用正则表达式集合

[复制链接]

尚未签到

发表于 2015-12-26 10:39:39 | 显示全部楼层 |阅读模式
  本文罗列了一些常用的正则表达式,不间断更新中。。。

去除前导空格



s/^\s+//
去除尾部空格



s/\s+$//
去除前后空格



s/^\s+|\s+$//g
匹配任意字符



/.*/s

  这里/s表示连换行符也匹配,因为.是不匹配换行符的,所以上面的表达式匹配任意字符。下面看第二种方法,perl中的元字符.能匹配所有单个字符,但是不能匹配换行符,如果要匹配的文本含有换行符,那么.将无法胜任,比如下面的xml文件。



<Response>
    <Code>200</Code>
    <Description>Success</Description>
</Response>
  如果想取得Response结点中的内容,那么下面的表达式无法完成工作,因为两行文本中间有一个换行符。



<Response>(.*)<\/Response>
  那么如何匹配任意字符呢?可以用下面的正则表达式



[\d\D]
  \d表示数字,\D表示非数字,数字加非数字也就是所有字符了。当然还可以使用[\s\S]或者[\w\W]等等,所以上面那个匹配可以写成



<Response>([\s\S]*)<\/Response>
返回所有匹配
  假设有如下xml文件,我们想返回所有step之间的文本,这里即abc和xyz。



<Steps>
    <Step index='1'>abc</Step>
    <Step index='2'>xyz</Step>
</Step>
  那么可以使用下面的方法



my@result=$text=~/<Step.*?>(.*)<\/Step>/g ;
  解释一下,<Step.*?>匹配abc左边的内容,为防止*匹配到本行末尾,我们使用其懒惰型版本*?,(.*)匹配abc,这里使用了分组,这样结果才能存放到result数组里面,<\/Step>匹配闭合的Step,由于/是模式的分隔符,所以需要转义。

/(fred)*/能匹配Hello, world!么?
  能,因为模式串/(fred)*/表示目标串中有0个或者任意个fred,而Hello, world含有0个fred,所以符合要求。

匹配任意数字

十进制数



/^\d+$/
  这个很简单,没什么说的,注意这里匹配的是单独的数字串,也就是一个数字独立作为一行出现。而不是出现在其他字符串中的数字。所以要加行的起始符和结束符。如果想要在一个长字符串中找出数字,那么可以使用\b作为单词的边界符。可以使用下面的正则表达式



/\b\d+\b/
八进制数



/^0[0-7]+$/
  八进制数是以0开头的,还要注意八进制数中基数最大是7,写成/^0\d+$/是不对的。

十六进制数



/^0[xX][\da-fA-F]+$/
  十六进制数以0x或0X开头,字符可以是0-9或a-f(A-F)。注意这里没有处理字母大小写混合的情况,所以0x12aBcD也是合法的十六进制数。如果要保持大小写一致的话,可以使用下面的表达式。



/^0x[\da-f]+$|^0X[\dA-F]+$/
匹配任意数字
  将上面的十进制,八进制和十六进制联合起来即可。



/^\d+$|^0[0-7]+$|^0[xX][\da-fa-F]+$/
  注意不能将^和$提取出来作为公共部分,下面这样写是不对的



/^\d+|0[0-7]+|0[xX][\da-fa-F]+$/
  因为|会将它前面所有字符作为一个模式,所以^\d+成了一个独立的模式,这样导致只会匹配字符串开头一个十进制数,同样也只会匹配结尾的一个十六进制数。这显然是不对的。如果非要这么些,可以将模式加上小括弧作为一个分组,像下面这样。这样写貌似也不对,需要继续研究。



/^(\d+)|(0[0-7]+)|(0[xX][\da-fA-F]+)$/
  ====

运维网声明 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-156475-1-1.html 上篇帖子: Perl 特殊变量详解 下篇帖子: perl去除文本行首尾空格
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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