2016-03-02 72 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

我添加了更多解释。 –