• perl常用正则表达式集合


    个人常用正则表达式:


    去除前导空格

    s/^s+//

    去除尾部空格

    s/s+$//
    

    去除前后空格

    s/^s+|s+$//g

    匹配任意字符

    /.*/s

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

    <</span>Response>
    <</span>Code>200</</span>Code>
    <</span>Description>Success</</span>Description>
    </</span>Response>

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

    <</span>Response>(.*)<</span>/Response>
    

    那么如何匹配任意字符呢?可以用下面的正则表达式

    [dD]
    

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

    <</span>Response>([sS]*)<</span>/Response>

    返回所有匹配

    假设有如下xml文件,我们想返回所有step之间的文本,这里即abc和xyz。

    <</span>Steps>
    <</span>Step index='1'>abc</</span>Step>
    <</span>Step index='2'>xyz</</span>Step>
    </</span>Step>

    那么可以使用下面的方法

    my@result=$text=~/<</span>Step.*?>(.*)</Step>/g ;
    

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

    /(fred)*/能匹配Hello, world!么?

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

    匹配任意数字

    十进制数

    /^d+$/
    

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

    /d+/
    

    八进制数

    /^0[0-7]+$/
    

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

    十六进制数

    /^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]+)$/
    
  • 相关阅读:
    Android Bitmap 常见的几个操作:缩放,裁剪,旋转,偏移
    vue.js 本地解决跨域
    VUE添加网站favicon.ico图标
    在mpvue引入flyio
    页面中加入地图map
    360校招——最后赢家(C++)
    奇安信校招——买口罩(c++)
    携程校招——携程海洋馆的海豚小宝宝(C++)
    阿里云Web应用托管服务,低成本建个人博客(wordpress和wiki.js)
    (嵌入式)工程模板的创建和MDK下配置开发STM32F103ZE
  • 原文地址:https://www.cnblogs.com/xiaopengren/p/3412303.html
Copyright © 2020-2023  润新知