正则基础之量词
2023-10-26 本文已影响0人
Tinyspot
1. 常用量词
1.1 量词 (+)
示例:ab+
vs (ab)+
1.2 量词 (?)
1.3 量词 (*)
匹配双引号字符串(可以为空串 "")
正则表达式 "[^"]*"
2. 通用形式的量词
-
{m,n}
逗号之后不能有空格 -
{n}
出现 N 次 -
{m,n}
出现 m ~ n 次 -
{m,}
至少 m 次 -
{0,n}
最多 N 次,隐式的上限是65536
2.1 匹配数字
试试 \d{2,3}?
, \d{2,3}+
2.2 匹配数字2
2.3 匹配数字 - 边界
\d{15}|\d{18}
匹配结果不准确,因为18 位数字也会匹配上前 15 位
试试 ^(\d{15}|\d{18)$
3. 量词的三种模式
- 不管是贪婪或非贪婪,都会让位于整体匹配
Greedy | 数量词 | Reluctant | 数量词 | Possessive | 数量词 |
---|---|---|---|---|---|
X? | X{0,1} | X?? | X{0,1} | X?+ | X{0,1} |
X* | X{0,} | X*? | X*+ | --- | |
X+ | X{1,} | X+? | X++ | --- | |
X{n} | --- | X{n}? | X{n}+ | --- | |
X{n,} | --- | X{n,}? | X{n,}+ | --- | |
X{n,m} | --- | X{n,m}? | X{n} | X{n,m}+ | X{n,m} |
3.1 Greedy 量词
-
+, *
是贪婪匹配
*
代表 0 到多次,匹配 0 次就是空字符串
3.2 Reluctant 量词
- 在量词后面加上英文问号 (?),可将贪婪模式变成非贪婪模式
3.3 回溯
- 不管是贪婪模式,还是非贪婪模式,都需要发生回溯才能完成相应的功能
xy{1,3}z
首先匹配 3 个 y, 但正则 z 会匹配不上,此时正则向前回溯,吐出当前字符 z,接着用正则中的 z 去匹配
xy{1,3}?z
首先匹配 1 个 y, 但 z 会匹配不上,此时向前回溯...
3.4 独占模式 (Possessive)
- 量词后面加上加号(+)
- 独占模式和贪婪模式很像,独占模式会尽可能多地去匹配,如果匹配失败就结束,不会进行回溯,这样的话就比较节省时间
独占模式 xy{1,3}+y
只能匹配 xyyyy
其他:xy{1,3}?y
只能匹配 xyy
4. 实战
字符串 "dxxxxdxxxd"
d.+d
贪婪匹配,虽然让位于整体匹配,但也是在尽可能多的匹配情况下
d.+?d
非贪婪匹配,匹配一个dxxxxd
d.+?
会匹配两个 dx