2016-03-02 75 views
0

$ str ='xyzab abab xhababab';模式在正則表達式中重複使用php

我想檢查字符串是否連續3次包含ab。意味着ABABAB

它不工作:

$subject = "xyzab abab xhababab"; 
$pattern = '/ab{3}/'; 
preg_match_all($pattern, $subject, $matches2,PREG_OFFSET_CAPTURE); 
var_dump($matches2); 
+0

是'ababab'你想獲得或'xhababab'結果呢? –

+0

是的,我想'ababab'。謝謝你回答匹配 – Curious

回答

3

您需要的ab包裝成一個分組構造:

(?:ab){3} 
^^^^

regex demo

的量詞應用於在它左側的子模式。因此,在ab{3}{3}量化b符號,它匹配abbb。當您將子模式序列分組然後將一個量詞設置爲時,則對所有子模式序列進行量化。

注意(?:...)non-capturing group,其僅用於分組,不捕獲(被提供用於與該組相匹配的子串即,沒有單獨的存儲器緩衝器)。

如果您不需要該組捕獲其匹配,則可以將此正則表達式優化爲Set(?:Value)?。左括號後面的問號和冒號是創建非捕獲組的語法。開頭括號後面的問號與正則表達式末尾的問號無關。

IDEONE demo

$subject = "xyzab abab xhababab"; 
$pattern = '/(?:ab){3}/'; 
preg_match_all($pattern, $subject, $matches2,PREG_OFFSET_CAPTURE); 
var_dump($matches2); 
+0

'?:'它是做什麼的? – Curious

+0

我添加了更多解釋。 –