2016-02-17 38 views
5

我有以下字符串PCRE正則表達式重疊的匹配

001110000100001100001 

,這表達

/[1]....[1]/g 

這使得兩場比賽

matches

,但我希望它也匹配這兩者之間的模式可以這麼說,重疊1

我絕對沒有線索,這個工作怎麼樣?而不是0它可以是任何字符

+0

'/(pattern)(。*?)\ 1 /'使用此值並獲取第二個捕獲的組值。不需要看後面。 – Tushar

+0

如果您需要完整匹配,請嘗試[(?:。?(?<= 1).... 1)+](https://regex101.com/r/rN2uV2/1) –

回答

5

一個常見的技巧是在未錨定的正視圖中使用捕獲技術。使用此正則表達式與preg_match_all

(?=(1....1)) 

regex demo

values are in $matches[1]

$re = "/(?=(1....1))/"; 
$str = "001110000100001100001"; 
preg_match_all($re, $str, $matches); 
print_r($matches[1]); 

lookahead reference

環視實際匹配的字符,但後來放棄了比賽,只返回結果:匹配或不匹配CH。這就是爲什麼他們被稱爲「斷言」。它們不消耗字符串中的字符,但只聲明是否可以匹配。

如果你想在正則表達式的匹配存儲在先行裏面,你必須圍繞正則表達式放捕獲括號先行裏面,像這樣:(?=(regex))

+1

非常感謝您,我已經有積極的前瞻,但沒有做對,這是工作完美,很好地解釋 –