我有这个:
$subject ="bla foo bar, blafoo, blabla, ";
$pattern = '/, {2,}/';
if (preg_match($pattern, $subject)){
echo "true";
}else{
echo "false";
}
我想测试逗号+空格是否在主题中出现两次或更多次。但是,上面的返回false。所以我做错了。
答案 0 :(得分:1)
让我们忽略这样一个事实:如果你想确切地检查你发布的内容,那么比较strpos($subject, ', ') != strrpos($subject, ', ')
会更有效。
你的正则表达式有2个问题,重复只应用于空格(不是序列)加上你没有任何其他字符的空间,所以你的正则表达式目前检查你的主题是否包含,<SP><SP>
解决这两个问题会导致:
var_dump(preg_match('~(, .*){2,}~', $subject));
答案 1 :(得分:1)
由于您正在寻找文字子字符串,请使用substr_count
:
if (substr_count($subject, ', ') > 2) {
...
} else {
...
}
如果您想要使用正则表达式执行相同的操作,请使用preg_match_all
以相同的方式返回出现次数。
要在模式中重复多个字符/标记,您需要对它们进行分组。您可以使用非捕获组(?:...)
:
(?:, ){2,}
没有组,只重复最后一个标记。 (所以你的例子中的空格)。
但是这个模式没有描述你的字符串,因为逗号之间还有其他字符,你必须添加它们:
(?:, [^,]*){2,}