正则表达式

    以下摘录一些常用的正则表达式用法:

    同其他正则表达式一样,可以使用和$表示开始和结束:

    • ^abc - 必须以abc开始
    • efg$ - 必须以efg结束
    • ^abc.+efg$ - 匹配对象必须是以abc开始,efg结束

    字符集

    • . - 点(.)符号表示匹配任何字符,包括换行符
    • [abc] - 字符集,表示匹配abc字符中的任何一个
    • [^abc] - 反向字符集,表示不匹配abc字符中的任何一个
    • \d - 数字字符集,相当于[0-9]
    • \D - 非数字字符集,相当于[^0-9]
    • \w - 单词字符集,相当于[0-9A-Za-z_]
    • \s - 空白字符集,相当于[\t\n\f\r ]
    • \S - 非空白字符集,相当于[^\t\n\f\r ]
    • \b - 单词边界
    • \B - 非单词边界
    • [[:alpha:]] - ASCII字符集
    • [[:^alpha:]] - 非ASCII字符集
    • \pN - Unicode字符集,只有一个字符
    • \p{Greek} - Unicode字符集
    • \PN - 非Unicode字符集,只有一个字符
    • \P{Greek} - 非Unicode字符集
    • - xy相邻,y紧跟x之后
    • x|y - xy,遇到x即宣告匹配成功

    重复

    • x* - 0或多个x,尽可能匹配最多的x
    • x+ - 1或多个x,尽可能匹配最多的x
    • x? - 0或1个x,尽可能匹配最多的x
    • x{n,m} - n到m个x,尽可能匹配最多的x
    • x{n} - n个x
    • x*? - 0或多个x,尽可能匹配最少的x
    • x+? - 1或多个x,尽可能匹配最少的x
    • x?? - 0或1个x,尽可能匹配最少的
    • x{n,m}? - n到m个x,尽可能匹配最少的x
    • x{n,}? - n个以上的x,包括n个x,尽可能匹配最少的x
    • x{n}? - n个x
    • (re) - 编号从1开始,0表示全部匹配的内容
      • 比如(hello)(world)匹配结果就有两个分组,编号分别为1和2
    • (?P<name>re) - 命名分组
      • 比如使用(?P<myName>\w+)来匹配ZhangSan,那么myName对应的值就被定义为ZhangSan
    • (?:re) - 跳过分组
      • 比如(?:hello)(world)匹配结果就只有一个分组(world),编号为1;因为hello这个分组被跳过

    标记

    在别的正则表达式中称之为修饰符(modifier):

    • i - 表示大小写 敏感
    • m - 多行匹配,如果有$结束字符的时候需要此标记
    • s - 让点符号(.)也匹配\n

    使用(?FLAG)(?:FLAG)语法来使用这些标记,并且这里的括号并不会产生新的分组:

    使用反斜杠表示转义字符,用来表示某个字符是原始的字符,而不是正则表达式,比如匹配文件扩展名:

    1. \.(php|asp|jsp|py)

    中的点(.)因为在正则表达式中有别的意义,所以需要用反斜杠转义。