$ str ='xyzab abab xhababab';
我想检查字符串是否连续包含ab 3次。意味着 ababab
不起作用:
$subject = "xyzab abab xhababab";
$pattern = '/ab{3}/';
preg_match_all($pattern, $subject, $matches2,PREG_OFFSET_CAPTURE);
var_dump($matches2);
答案 0 :(得分: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);