转载

作为程序员之正则表达式

正则表达式

[TOC]

基础语法

标准字符集合

/D 和[^/d]意思一样,就是与 /d 相反

REG 意义
/d digital 表示 0 到 9 之间任意的一个数字
/w world 表示任意一个 字母或数字或下划线 ,不包含¥$%等
/s space 表示包括空格、制表符、换行符等空白字符中任意一个
. 可以匹配任意一个字符

自定义的字符集合

REG 意义
[ad# ] 方括号 表示匹配 a 或 d 或 # 或 空格
[ad# ] 表示除方括号意外的字符
[a-g] 表示匹配 a 到 g 之间的字符,别和上面的混淆了
[^a-f,0-3] 匹配除了 a - f 和 0 到 3以外的字符

匹配次数

| REG | 意义 |

|:------|------: |

| (/d){10} |前面的规则重复匹配了10次 |

| {n,m} |表示至少重复n次,最多重复m次 |

| {n,} |至少n次|

| ? | 同{0,1} |

| + | 同{1,} |

| * | 同{0,} |

多行、单行模式

  1. 忽略大小写:ignorecase
  2. 单行模式:single line 整个串作为一个模板串
  3. 多行模式:multi line 模板串分为多个行

    字符边界/匹配位置

    REG 意义
    ^ 与字符串开始的地方匹配
    $ 与字符串结束的地方匹配
    /b 表示在边界处匹配字符,放在左右会不一样的结果

高级语法

选择符和分组

REG 意思
/| 表示‘或’的意思,匹配左边或右边
() 对正则表达式分组,更好地组织匹配
(?:Expression) 不把()组中匹配到的字符不保存到group中

反向引用

/nnn 反向引用|把捕获的字符分组编号,左括号为一个分组

预搜索/零宽断言

也是匹配位置

很少用的

REG 意义
(/w)(?=Expression) 匹配以 Expression匹配到的字符结尾 的字符
(/w)(?!Expression) 匹配 不能以Expression匹配到的字符结尾 的字符
(/w)(?<=Expression) 位置 前面 可以匹配Expression
(/w)(?<!Expression) 位置 后面 可以Expression

表达式 方向 说明

| GEG |意义|

|:----|----:|----:|

| (?=xxx) |正向预搜索(向右) 正向预搜索,判断当前位置右侧是否能匹配指定表达式 |

| (?!xxx) | 正向预搜索(向右) 正向预搜索否定,判断当前位置右侧是否不能够匹配指定表达式 |

| (?<=xxx) | 反向预搜索,反向预搜索,判断当前位置左侧是否能够匹配指定表达式|

例子

匹配邮箱

作为程序员之正则表达式 作为程序员之正则表达式

要考虑的问题:

  1. :(/w+)
  2. 匹配“.”:. (因为“.”表示任意字符,所以要转义一下才能匹配到“.”)
  3. ,要考虑多层域名的匹配
  4. 用户名和域名中的大小写
  5. 用户名中含有 “.”
  6. 并不允许用户名中出现”-“

第一版

没能匹配到用户名中有 ”.“的邮箱

(/w+)@(/w+)(/.[a-zA-Z]{2,5}){1,2}

最终版

(/w)+(/./w+)*@(/w)+((/./w{2,3}){1,3})

作为程序员之正则表达式 这个可以匹配用户名含有“.“的邮箱

中文字符

[/u4e00-/u9fa5]

***

匹配IP地址

  1. 匹配:三个字符一个点 三个字符一个点 三个字符一个点 三个字符
  2. IP地址<255
  3. IP地址的数字不能以0开始,如:012.
  • 第一版:

    ((/d{1,3})/.){3}/d{1,3}

    把562.264.351也匹配了,没能确定IP地址<255

  • 第二版(最终版)

    (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
        / **  *    最简洁的IP判断正则表达式  *  25[0-5]                     250-255  *  2[0-4]/d                    200-249  *  [01]?/d/d?                 000-199(0-9 /d)(10-99 /d/d)(100-99 1/d/d)  *  ($|(?!/.$)/.)               结束 或者 不以.结束的加上.  *  (?!^0{1,3}(/.0{1,3}){3}$)     排除 0.0.0.0 /^(?!^0{1,3}(/.0{1,3}){3}$)((25[0-5]|2[0-4]/d|[01]?/d/d?)($|(?!/.$)/.)){4}$/  *  (?!^255(/.255){3}$)           排除 255.255.255.255  */ 

电话、手机号码

固定电话7位数,包含0开头和”—”移动电话11位数,以13或15开头

(0/d{2,3}-/d{7,9})|(1[35]/d{9})
正文到此结束
Loading...