2013-07-21 88 views
0

給定正則表達式"\d",它將匹配「a123b456」(即1,2,3,4,5,6)中的每個數字。正則表達式結果多重性

由於正則表達式"\d\d"和相同的TestString,它似乎只是爲了滿足「12」和「45」 - 這是至少是http://regexpal.com/說,同樣一個正則表達式求值,我創建自己使用++教材(使用升壓一個C /正則表達式)。

爲什麼第二個匹配「23」和「56」,或者如果該行爲是正確的,爲什麼第一個匹配每個數字?

回答

5

爲什麼第二個匹配「23」和「56」?

因爲這是重疊匹配,你期待正則表達式給你。一旦一個字符串的一部分匹配了一個模式,它將不會再次匹配相同的模式。所以,由於2已經被包含在前一場比賽中,因此12已經消失。正則表達式將移至下一個字符3。在該字符之後,它不能看到3作爲另一個匹配\d\d的字符串的一部分。下一個匹配此模式的子字符串僅在45

試着改變你的字符串:

"a1234b456" 

,您將獲得三場比賽 - 123445

但是,您可以使用積極前瞻得到重疊的匹配 - (?=\d\d),因爲查找變通0長度匹配表達式。他們不會消耗他們匹配的字符。

而只是僅供參考,您可以使用\d{2}而不是\d\d

2

如果你想匹配的所有結果,您可以使用期待/後面

(?=\d\d)