$ 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);
$ 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);
您需要的ab
包裝成一個分組構造:
(?:ab){3}
^^^^
的量詞應用於在它左側的子模式。因此,在ab{3}
{3}
量化b
符號,它匹配abbb
。當您將子模式序列分組然後將一個量詞設置爲組時,則對所有子模式序列進行量化。
注意(?:...)
是non-capturing group,其僅用於分組,不捕獲(被提供用於與該組相匹配的子串即,沒有單獨的存儲器緩衝器)。
如果您不需要該組捕獲其匹配,則可以將此正則表達式優化爲
Set(?:Value)?
。左括號後面的問號和冒號是創建非捕獲組的語法。開頭括號後面的問號與正則表達式末尾的問號無關。
$subject = "xyzab abab xhababab";
$pattern = '/(?:ab){3}/';
preg_match_all($pattern, $subject, $matches2,PREG_OFFSET_CAPTURE);
var_dump($matches2);
'?:'它是做什麼的? – Curious
我添加了更多解釋。 –
是'ababab'你想獲得或'xhababab'結果呢? –
是的,我想'ababab'。謝謝你回答匹配 – Curious