给定正则表达式"\d",它将匹配"a123b456"中的每个数字(即1,2,3,4,5,6).
给定正则表达式"\d\d"和相同的测试字符串,似乎只匹配"12"和"45" - 这至少是http://regexpal.com/所说的,类似于我使用C++教科书创建的正则表达式评估器(其中使用boost/regex).
为什么第二个匹配"23"和"56",或者,如果该行为是正确的,为什么第一个匹配每个数字?
为什么第二个不匹配"23"和"56"?
因为这是重叠匹配,你期待正则表达式给你.一旦字符串的一部分与模式匹配,它将不会再次匹配相同的模式.所以,既然2已经被包含在之前的比赛中12,它就消失了.正则表达式将移动到下一个字符3.并且跟随该字符,它不能3看作包含在另一个字符串匹配的一部分\d\d.匹配此模式的下一个子字符串只能在45.
尝试将字符串更改为:
"a1234b456"
Run Code Online (Sandbox Code Playgroud)
你会得到三场比赛- 12,34和45.
但是,您可以使用正向前瞻来获得重叠匹配- (?=\d\d)因为外观是0长度匹配表达式.他们不会消耗他们匹配的字符.
而且仅供参考,您可以使用\d{2}而不是\d\d.
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |