正则表达式 知识量:10 - 22 - 55
如果要对匹配字符重复的次数进行更加精确的控制,例如确定字符重复次数的上限或下限,应当使用设定匹配重复次数的语法:通过元字符“{”和“}”来实现。
如果要设定精确的重复次数,可以使用“{重复次数}”的方式。
示例文本:
a123.36 b32.11 c658.35 12d46.02 e6.33
正则表达式:
\d{3}.\d{2}
结果:
Match | Position | Length |
---|---|---|
123.36 | 1 | 6 |
658.35 | 16 | 6 |
以上正则表达式的含义是:匹配由3个数字+“.”+2个数字组成的字符串。
除了为重复次数设定精确值外,还可以设定一个重复次数的区间。
示例文本:
a123.36 b32.11 c658.35 12d46.02 e6.33
正则表达式:
\d{2,3}.\d{2}
结果:
Match | Position | Length |
---|---|---|
123.36 | 1 | 6 |
32.11 | 9 | 5 |
658.35 | 16 | 6 |
12d46 | 23 | 5 |
{2,3}表示重复2次到3次。
如果要设定至少重复多少次,只需要省略大括号内,逗号后面的数字即可。
示例文本:
a123.36 b32.11 c658.35 12d46.02 e6.33
正则表达式:
\d{2,}.\d{2}
结果:
Match | Position | Length |
---|---|---|
123.36 | 1 | 6 |
32.11 | 9 | 5 |
658.35 | 16 | 6 |
12d46 | 23 | 5 |
{2,}表示至少重复2次。
元字符“*”和“+”都是贪婪的,它们会尽可能的从一段文本的开头一直匹配到文本的末尾,这在很多时候会带来麻烦。
示例文本:
<body> <p>This is a page.The <b>Background</b> is <b>white</b>.</p> </body>
正则表达式:
<b>.*</b>
结果:
Match | Position | Length |
---|---|---|
Background is white | 31 | 33 |
显然,匹配的结果不是我们期望的那样。
要改变它们的贪婪本性,就要使用这些元字符的懒惰版本,在它们后面加一个“?”就行了。
贪婪型元字符 | 懒惰型元字符 |
---|---|
* | *? |
+ | +? |
{n,} | {n,}? |
上面示例的正则表达式修改为:
<b>.*?</b>
结果:
Match | Position | Length |
---|---|---|
Background | 31 | 17 |
white | 52 | 12 |
这样就可以得到预期的结果了。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6