正则表达式(英语:regular expression,常简写为regex、regexp或RE),又称规律表达式、正则表示式、正则表示法、规则表达式、常规表示法,是计算机科学概念,用简单字符串来描述、匹配文中全部匹配指定格式的字符串,现在很多文本编辑器都支持用正则表达式搜索、取代匹配指定格式的字符串。
译名问题#
描述字符串规律的表达式原应顺理成章称为规律表达式(pattern expression/rule expression),但却叫成有欠准确的regular expression,导致现在有多种中译名,如将regular译成规律、规则、正规、正则或常规,将expression译成表达式、表示式、表示法或表达式等。
PCRE#
在大多数开源工具或者编辑器中,默认支持的正则表达式通常是
PCRE↗
(Perl-Compatible Regular Expressions)或者其简化版本,其语法强大、兼容性好,通常适用于文本处理。 本篇内容均来源于
维基百科-正则表达式↗
基础字符与匹配位置#
字符 | 描述 | 示例 |
---|
\ | 转义字符 | \. 匹配一个点 . ,\\ 匹配反斜杠 |
^ | 匹配字符串开头 | ^abc 匹配以 abc 开头的字符串 |
$ | 匹配字符串结尾 | abc$ 匹配以 abc 结尾的字符串 |
. | 匹配除换行外的任意字符 | a.b 匹配 aab , acb , 不匹配 a\nb |
重复匹配(量词)#
字符 | 描述 | 示例 |
---|
* | 匹配零次或多次 | lo*l 匹配 ll , lol , lool , loooool |
+ | 匹配一次或多次 | lo+l 匹配 lol , lool ,不匹配 ll |
? | 匹配零次或一次 | do(es)? 匹配 do 或 does |
{n} | 匹配n次 | a{3} 匹配 aaa |
{n,} | 匹配至少n次 | a{2,} 匹配 aa , aaa , aaaa |
{n,m} | 匹配n到m次 | a{2,4} 匹配 aa , aaa , aaaa |
*? +? ?? | 非贪婪匹配 | <.*?> 匹配最短标签,如 <div> 而不是 <div>content</div> |
分组与引用#
字符 | 描述 | 示例 |
---|
(abc) | 捕获分组 | (abc)+ 匹配 abcabc |
(?:abc) | 非捕获分组 | (?:abc)+ 也匹配 abcabc ,但不捕获 |
\1 , \2 … | 向后引用 | (a)\1 匹配 aa ,(.)\1 匹配两个相同字符 |
(?<name>...) | 命名分组 | (?<word>\w+) 捕获一个单词 |
\k<name> | 命名引用 | (?<d>\d)\k<d> 匹配两个相同数字,如 33 |
断言(不消费字符)#
字符 | 描述 | 示例 |
---|
(?=abc) | 正向肯定预查 | \w+(?=ing\b) 匹配 sing 中的 sing (去掉ing) |
(?!abc) | 正向否定预查 | \w+(?!ing\b) 匹配不以 ing 结尾的单词 |
(?<=abc) | 反向肯定预查 | (?<=abc)\w+ 匹配 abcXYZ 中的 XYZ |
(?<!abc) | 反向否定预查 | (?<!abc)\w+ 匹配不在 abc 后的单词 |
选择与字符集#
字符 | 描述 | 示例 |
---|
x|y | 匹配 x 或 y | cat|dog 匹配 cat 或 dog |
[abc] | 匹配 a 或 b 或 c | 匹配 a , b 或 c 中的任意一个 |
[^abc] | 非字符集 | 匹配除 a , b , c 外的任意字符 |
[a-z] | 范围匹配 | 匹配所有小写字母 |
[^a-z] | 非范围匹配 | 匹配非小写字母的字符 |
常用转义字符#
字符 | 描述 | 示例 |
---|
\d | 数字字符 [0-9] | \d+ 匹配数字,如 123 |
\D | 非数字字符 | \D+ 匹配字母或符号,如 abc! |
\w | 单词字符(含汉字) | \w+ 匹配 abc123_汉 |
\W | 非单词字符 | 匹配空格、标点等 |
\s | 空白字符 | 匹配空格、\t , \n 等 |
\S | 非空白字符 | 匹配任何非空格字符 |
\t | 制表符 | 匹配 Tab |
\n | 换行符 | 匹配换行 |
\r | 回车符 | 匹配回车 |
\f | 换页符 | 匹配打印页结束符 |
\v | 垂直制表符 | 很少见,匹配 \x0b |
编码与进阶引用#
字符 | 描述 | 示例 |
---|
\xnn | 十六进制字符 | \x41 匹配 A |
\uXXXX | Unicode字符 | \u00A9 匹配 © |
\0 ~\777 | 八进制字符 | \040 匹配空格(十进制32) |
其他特殊用法#
字符 | 描述 | 示例 |
---|
\b | 单词边界 | \bhi\b 匹配独立单词 hi |
\B | 非单词边界 | \Bhi\B 匹配 behind 中的 hi |
\cX | 控制字符 | \cM 匹配回车符(Ctrl+M) |