正则表达式 Cheatsheet

用来匹配和处理文本的字符串。 基本用途是查找和替换。一种不完备的程序设计语言。

锚点

^ 字符串开头,或多行模式中的行开头
\A 字符串的开始
$ 字符串结尾,或多行模式中的行尾
\Z 字符串结束
\b 字边界
\B 不是单词边界
\< 词的开头
\> 词尾

字符集

\c 控制字符
\s 任何一个空白字符([\f\n\r\t\v])
\S 任何一个非空白字符([^\f\n\r\t\v])
\d 任何一个数字字符
\D 任何一个非数字字符
\w 任何一个字母数字字符或下划线字符([a-zA-Z0-9_])
\W 任何一个非字母数字或非下划线字符([^a-zA-Z0-9_])
\x 十六进制数字
\O 八进制数

量词

+ 1 个或更多
* 0 个或更多
? 0 个或 1 个
{} 匹配指定个数
{3} 精确的 3 个
{3,} 3 个或更多
{3,5} 3,4,5

添加 ? 表示非贪婪模式,懒惰型匹配,匹配最小子集。

1
2
3
+?
*?
{n,}?

断言

?= 前瞻断言
?! 负前瞻
?<= 后向断言
?!= or ?<! 负面回顾
?> 一次性子表达式
?() 条件 [if then]
?()| 条件 [if then else]
?# 评论

转移

\ 转义后面的字符
\Q Begin literal sequence
\E End literal sequence

『转义』是一种处理正则表达式中具有特殊含义的字符的方式,而不是特殊字符。

常用元字符

^
[
.
$
{
*
(
\
+
)
|
?
<
>

特殊字符

\n 新行
\r 回车
\t 制表符
\v 垂直制表符
\f Form feed
\xxx 八进制字符 xxx
\xhh 十六进制字符 hh

组合范围

. 除换行符 (\n) 以外的任何字符
(a|b) a 或 b
(...)
(?:...) 被动(非捕获)组
[abc] 范围 a b c
[^abc] not (a or b or c)
[a-q] 从 a 到 q 的小写字母
[A-Q] 从 A 到 Q 的大写字母
[0-7] 从 0 到 7 的数字
\x 组/子模式编号『x』

范围包括在内。

例子

回溯引用

下面例子匹配 空格 字符 空格
原始图片
下面的例子使回溯引用
原始图片
解释回溯引用,\1用来获取(\w+)中的字符串。第一个匹配上的of\1引用,就变成表达式[ ]+(\w+)[ ]+of
其中\1代表模式里的第一个子表达式,\2就会代表着第二个子表达式,以此递推。

替换

原始图片

大小写转换测试工具不支持,待测试

向前查找、向后查找

必须要放到一个字表达式中,如下例子,根据:来匹配,但是不消费他。
(?=) 向前查找

原始图片

(?<=) 向后查找
原始图片

(?!) 负向前查找
(?<!) 负向后查找

嵌入条件

(?(brackreference)true-regex)其中?表明这是一个条件,括号里的brackreference是一个回溯引用,true-regex是一个只在backreference存在时才会被执行的子表达式。
原始图片

不区分大小写匹配

原始图片

字符区间匹配

原始图片

取非匹配

原始图片

匹配多个字符

原始图片

子表达式

原始图片

匹配四位数的年份

原始图片

嵌入查找、向后查找组合应用

原始图片