$ 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