常见正常表达式

整理一波常用的正则表达式。万变不离其宗,主要是要掌握元数据。

字符

. 匹配任意字符,除换行符 \n 之外。

\ 转义字符,使得正则表达式中的关键词变为原来的意思。

[···] 字符集。取字符集中的任意一个字符,比如 [123][1-3]。如果第一个字符是 ^,那么代表取反,[^123] 为不包含 1、2、3 的其他字符。

预定义字符集

\d 数字,[0-9]

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

\s 空白字符,[<空格>\t\r\n\f\v]

\S 非空白字符,[^\s]

\w 单词字符,[a-zA-Z0-9]

\W 非单词字符,[^\w]

数量词

* 匹配前一个字符 0 次或者多次。

+ 匹配前一个字符 1 次或者多次。

? 匹配前一个字符 0 次或者 1 次。

{m} 匹配前一个字符 m 次。

{m, n} 匹配前一个字符 m 到 n 次,可以缺少上限或者下限。比如不写 m,那就是最多 n 次。

非贪婪模式,使用 ? 搭配其他数量。比如 *?+?{m, n}?

边界匹配

^ 匹配字符串开头。

$ 匹配字符串末尾。

\b 单词边界。

逻辑或

| 匹配到前面的就不会进行匹配后面的。

分组

(···) 从 1 开始计数,0 代表整个匹配的字符串。

\<数字> 引用固定编号的分组匹配到的字符串。

预测与回顾

(?=···) 正预测断言,例如 abc(?=.*xyz) 要求字符串 abc 右边存在字符串 xyz

(?!···) 负预测断言,要求右边不存在指定字符串。

(?<=···) 正回顾断言,检测当前位置的左边。

(?<!···) 负回顾断言,要求左边不存在指定字符串。

回顾不支持可变大小的限定符,比如 *?+

相关网页

在线正则表达式测试,并且给出正则表达式的解释。https://regex101.comhttps://regexr.com

正则表达式可视化,可以导出流程图。https://jex.im/regulex/