标签为'正则表达式'的全部存档

正则简单笔记

1. 元字符 (Metacharacter)

匹配字符串的开始(位置):  ^

匹配字符串的开始(不受处理多行选项影响):  \A

匹配字符串的结束(位置):  $

匹配字符串的结束(不受处理多行选项影响):  \z

匹配字符串的开始/结束(位置):  \b

匹配字符串的结束/行尾(不受处理多行选项影响):  \Z

匹配数字/字母/下划线/汉字:  \w

匹配(阿拉伯)数字:  \d

匹配空白符(空格/全角空格/制表符/换行符):  \s

匹配横向制表符:  \t

匹配竖向制表符:  \v

匹配回车:  \r

匹配换行符:  \n

匹配换页符:  \f

匹配任意字符(除换行符\n):  .

前述表达式重复任意次:  *

2. 元字符转义 (查找元字符本身)

\.  \*  \\  \^  \$  等.

3. 字符类 (自定义的元字符):  [ ]

e.g. [13579] 匹配1或3或5或7或9中的任意一个数字.

4. 限定符 (规定表达式重复次数)

重复至少0次:  *

重复至少1次:  +

重复0次或1次:  ?

重复n次:  {n}

重复n次或更多次:  {n,}

重复m到n次:  {m,n}

e.g. \d{2,9} 匹配2-9位阿拉伯数字.

5. 分枝:  |

p.s. 分枝条件按照从左到右的顺序测试. 如果已满足了某个分枝, 则匹配结束. 故使用分枝条件时, 一定要反复斟酌各个条件的书写顺序.

6. 反义

对于元字符, 把元字符里的字母小写换为大写即表示反义. 对于字符类, [^13579] 匹配除了1或3或5或7或9以外的任意字符. 一个不错的例子:

<a[^>]+> 匹配用尖括号括起来的以a开头的字符串

7. 分组:  ( )

和编程写公式时多加括号防止写错有点类似. 不过这里的现实意义强得多, 可以用来写出比较复杂的表达式.

8. 贪婪/懒惰

在正则表达式中, [最先开始的匹配] 拥有最高优先权. 其次才是默认的贪婪匹配原则. 与之对应的懒惰匹配原则:

重复0次或1次:  ??

重复至少1次:  +?

重复m到n次:  {m,n}?

重复n次以上:  {n,}?

重复任意次:  *?

9. 零宽断言

(1) 零宽度正预测先行断言:  (?=exp)

断言此位置之后能匹配表达式exp

e.g. \b\w+(?=ly\b) 匹配以ly结尾的字符串的前面部分.

(2) 零宽度正回顾后发断言:  (?<=exp)

断言此位置之前能匹配表达式exp

e.g. (?<=\bpre)\w+\b 匹配以pre开头的字符串的后面部分.

(3) 零宽度负预测先行断言:  (?!exp)

断言此位置之后不能匹配表达式exp

e.g. \b((?!exe)\w)+\b 匹配不包含连续字符串exe的字符串.

(4) 零宽度负回顾后发断言:  (?<!exp)

断言此位置之前不能匹配表达式exp

e.g. (?<!010)\d{8} 匹配前面不是010的8位数字.

10. 注释

(?#注释内容)