正则表达式

正则表达式 知识量:10 - 22 - 55

5.2 设定匹配次数><

设定精确值- 5.2.1 -

如果要对匹配字符重复的次数进行更加精确的控制,例如确定字符重复次数的上限或下限,应当使用设定匹配重复次数的语法:通过元字符“{”和“}”来实现。

如果要设定精确的重复次数,可以使用“{重复次数}”的方式。

示例文本:

a123.36
b32.11
c658.35
12d46.02
e6.33

正则表达式:

\d{3}.\d{2}

结果:

MatchPositionLength
123.3616
658.35166

以上正则表达式的含义是:匹配由3个数字+“.”+2个数字组成的字符串。

设定区间- 5.2.2 -

除了为重复次数设定精确值外,还可以设定一个重复次数的区间。

示例文本:

a123.36
b32.11
c658.35
12d46.02
e6.33

正则表达式:

\d{2,3}.\d{2}

结果:

MatchPositionLength
123.3616
32.1195
658.35166
12d46235

{2,3}表示重复2次到3次。

设定至少重复次数- 5.2.3 -

如果要设定至少重复多少次,只需要省略大括号内,逗号后面的数字即可。

示例文本:

a123.36
b32.11
c658.35
12d46.02
e6.33

正则表达式:

\d{2,}.\d{2}

结果:

MatchPositionLength
123.3616
32.1195
658.35166
12d46235

{2,}表示至少重复2次。

防止过度匹配- 5.2.4 -

元字符“*”和“+”都是贪婪的,它们会尽可能的从一段文本的开头一直匹配到文本的末尾,这在很多时候会带来麻烦。

示例文本:

<body>
  <p>This is a page.The <b>Background</b> is <b>white</b>.</p>
</body>

正则表达式:

<b>.*</b>

结果:

MatchPositionLength
Background is white3133

显然,匹配的结果不是我们期望的那样。

要改变它们的贪婪本性,就要使用这些元字符的懒惰版本,在它们后面加一个“?”就行了。

贪婪型元字符懒惰型元字符
**?
++?
{n,}{n,}?

上面示例的正则表达式修改为:

<b>.*?</b>

结果:

MatchPositionLength
Background3117
white5212

这样就可以得到预期的结果了。