# Regex
# 参考文档
# Regex 简介
Regex,即 Regular expression。
# 元字符
.
除换行符外的任意字符\w
字母、数字、下划线、汉字\s
任意空白符(包括空格、制表符、换行符、中文全角空格等)\d
数字\b
单词的开始或结束^
字符串的开始$
字符串的结束
示例:
^\d{1,3}$
标识使整个字符串匹配\d{1,3}
。
# 重复/限定符
*
0 或 多次+
1 或 多次?
0 或 1 次{n}
重复 n 次{n,}
重复 n 或 多次{n,m}
重复 n 到 m 次
{...}
其实就是指定具体的重复字数,开闭区间。
示例:
\b\w{6}\b
6 位单词
# 转义字符
\
是转义字符。
# 字符类
[任意字符集合]
匹配括号中任意一个[^...]
取集合的反值[?!.]
匹配 ? ! .
在 []
中的一些值跟外面的含义是不一样的: 比如 ^
在外面表示开头,? ! .
在外面可能是表示重复,或者需要转义。
# 分支条件
|
,从左往右测试,短路满足,如果第一个条件满足,就不会再测试第二个了
# 分组/子表达式
- 使用
()
将表达式包起来,就可以看做为一个 子表达式,然后就可以指定这个整体的重复次数了
示例:
- 匹配 IP:
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
- 即理解
( 2[0-4]\d | 25[0-5] | [01]?\d\d? )
- 即理解
# 反义
大写取反
\W
非 字母、数字、下划线、汉字\S
非 任意空白符(包括空格、制表符、换行符、中文全角空格等)\D
非 数字\B
非 单词的开始或结束[^abc]
除 abc 以外的
# 后向引用/捕获
(exp)
,捕获文本到自动命名的组(?<key>exp)
或者(?'key'exp)
,捕获文本到名称为 name 的组里(?:exp)
,不捕获匹配的文本,也不给此分组分配组号
# 零宽断言
使用断言用来查找某些内容(但是又不包括某些内容)之前或者之后的东西,
也就说把它们整体当做 \b
、^
、$
一样的作用,去指定 一个位置。
注意: 这里只匹配一个位置。
# 正向
(?=exp)
,它断言 自身出现的位置 后面能匹配表达式,即(? = exp)
,?
指的是那个位置,然后?
后面是 exp。- 也称为 零宽度正预测先行断言
(?<=exp)
,它断言 自身出现的位置 前面能匹配表达式- 也称为 零宽度正回顾后发断言
# 负向零宽断言
(?!exp)
,它断言 这个位置 后面不能匹配表达式- 也称为 零宽度负预测先行断言
(?<!exp)
,它断言 这个位置 前面不能匹配表达式- 也称为 零宽度负回顾后发断言
# 贪婪/非贪婪
在数量限定符后面加上 ?
,可以在匹配成功的前提下使用最少的重复。
最少的重复?那为什么不直接使用
?
就可以了?
示例:
例如 aababab
:
- 贪婪(默认)
a.*b
会匹配整个字符串 - 非贪婪
a.*?b
这里*
表示重复 0 次或多次,然后在它后面添加?
,是重复任意次数的前提下,尽可能少的重复。- 这里匹配结果是 aab 和 ab 和 ab,
# 注释
(?#comment)
# 讨论区
由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。