我有以下字符串PCRE正則表達式重疊的匹配
001110000100001100001
,這表達
/[1]....[1]/g
這使得兩場比賽
,但我希望它也匹配這兩者之間的模式可以這麼說,重疊1
我絕對沒有線索,這個工作怎麼樣?而不是0它可以是任何字符
我有以下字符串PCRE正則表達式重疊的匹配
001110000100001100001
,這表達
/[1]....[1]/g
這使得兩場比賽
,但我希望它也匹配這兩者之間的模式可以這麼說,重疊1
我絕對沒有線索,這個工作怎麼樣?而不是0它可以是任何字符
一個常見的技巧是在未錨定的正視圖中使用捕獲技術。使用此正則表達式與preg_match_all
:
(?=(1....1))
$re = "/(?=(1....1))/";
$str = "001110000100001100001";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
環視實際匹配的字符,但後來放棄了比賽,只返回結果:匹配或不匹配CH。這就是爲什麼他們被稱爲「斷言」。它們不消耗字符串中的字符,但只聲明是否可以匹配。
如果你想在正則表達式的匹配存儲在先行裏面,你必須圍繞正則表達式放捕獲括號先行裏面,像這樣:
(?=(regex))
。
非常感謝您,我已經有積極的前瞻,但沒有做對,這是工作完美,很好地解釋 –
'/(pattern)(。*?)\ 1 /'使用此值並獲取第二個捕獲的組值。不需要看後面。 – Tushar
如果您需要完整匹配,請嘗試[(?:。?(?<= 1).... 1)+](https://regex101.com/r/rN2uV2/1) –