在regex php中重复的模式

时间:2016-03-02 09:48:38

标签: php regex pcre

  

$ 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);

1 个答案:

答案 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);