正则

206 阅读2分钟

什么是正则表达式?

Regular Expression(代码简写:regex,regexp或RE),正则表达式 是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。 即按照某种规则去匹配符合条件的字符串。

图形化理解工具

regexper.com

  • 手机号正则 /^1[34578][0-9]{9}$/

  • 单词边界 /\bis\b/
  • URL分组替换 /http:(//.+.jpg)/

  • 日期 /^\d{4}[/-]\d{2}[/-]\d{2}$/

  • 日期分组是

正则表达式语法

  • 修饰符 (三个 g i m)

g : global 执行一个全局匹配

i: ignore case 执行一个不区分大小写的匹配

m: multiple lines 多行匹配

有无 g

有无i

正则表达式由两种基本字符组成:文本字符 和 元字符

  • 元字符

    \cx 匹配由x指明的控制字符,如\cM 匹配一个control-M或回车符

    \f 匹配一个换页符

    \n 匹配一个换行符

    \r 匹配一个回车符

    \t 匹配一个制表符

    \v 匹配一个垂直制表符

    \s 匹配任何空白符,包括(空格、制表符、换页符,等价于[\f\n\t\r\v])

    \S 匹配任何非空白字符。 等价于[^ \f\n\r\t\v]

  • 字符类 [] 如[34578] 表示34578任意一个数字即可

  • 字符类取反[^] 表示不属于此类 (空格也不属于)

  • 范围类[-] 如[a-z0-9] ,若只想匹配- 则在范围最后加- 即可

  • 预定义类 :常用的方便书写的字符 等价类 [^\n\r] 除了回车符和换行符之外的所有字符

    \d 数字字符[0-9]

    \D 非数字字符[^0-9]

    \S 非空白符 [^\t\n\xOB\f\r]

    \w 单词字符(字符、数字、下划线) [a-zA-Z0-9]

    \W 非单词字符 [^a-zA-Z0-9]

  • 边界

    ^ 以xx 开头

    $ 以xx 结尾

    \b 单词边界,指[a-zA-Z0-9]之外的字符

    \B 非单词边界

  • 量词

    ? 出现零次或一次

    *出现 零次或多次(任意次)

    +出现一次或多次(至少一次)

    {n} 对应零次或 n 次

    {n,m} 至少出现n 次 但不超过 m 次

    {n,}至少出现n 次(+ 的升级版)

    {0,n} 至多出现n 次

  • 贪婪与懒惰(非贪婪)

贪婪模式:尽可能多的匹配 /\d{3,6}/匹配最多的情况

懒惰模式:尽可能少的匹配 /\d{3,6}?\

  • 分组与反向引用
    /^(\d{4})/-/-$/ 从左到右 $1$2....

反向引用:如不想获取年 加?: /^(?:\d{4})/-/-$/