php preg_match 测试逗号两次以​​上

php preg_match testing commas more than twice

我有这个:

$subject ="bla foo bar, blafoo, blabla, ";
$pattern = '/, {2,}/';
if (preg_match($pattern, $subject)){
    echo "true";
    }else{   
    echo "false";
    }

我想测试逗号+space是否在主题中出现两次或更多次。但是,上面的returns是错误的。所以我做错了什么。

让我们忽略一个事实,如果您想准确检查您发布的内容,比较 strpos($subject, ', ') != strrpos($subject, ', ').

会更有效

您的正则表达式有 2 个问题,重复仅应用于 space(不是序列),而且您没有为任何其他字符留出空间,因此您的正则表达式当前检查您的主题是否包含 ,<SP><SP>

解决这两个问题会导致:

var_dump(preg_match('~(, .*){2,}~', $subject));

由于您要查找文字子字符串,请使用 substr_count:

if (substr_count($subject, ', ') > 2) {
...
} else {
...
}

如果你想做同样的事情,但这次使用正则表达式,请使用 preg_match_all 以相同的方式 returns 出现的次数。

要在模式本身中重复多个 characters/tokens,您需要将它们分组。您可以使用非捕获组 (?:...):

(?:, ){2,}

没有组,只重复最后一个标记。 (因此您的示例中的 space)。

但是这个模式没有描述你的字符串,因为逗号之间还有其他字符,你必须添加它们:

(?:, [^,]*){2,}