正则表达式(英语: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)? 匹配 dodoes
{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 或 ycat|dog 匹配 catdog
[abc]匹配 a 或 b 或 c匹配 a, bc 中的任意一个
[^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
\uXXXXUnicode字符\u00A9 匹配 ©
\0~\777八进制字符\040 匹配空格(十进制32)

其他特殊用法

字符描述示例
\b单词边界\bhi\b 匹配独立单词 hi
\B非单词边界\Bhi\B 匹配 behind 中的 hi
\cX控制字符\cM 匹配回车符(Ctrl+M)