php预匹配测试逗号超过两次

php预匹配测试逗号超过两次,php,preg-match,Php,Preg Match,我有这个: $subject ="bla foo bar, blafoo, blabla, "; $pattern = '/, {2,}/'; if (preg_match($pattern, $subject)){ echo "true"; }else{ echo "false"; } 我想测试逗号+空格是否在主题中出现两次或更多。但是,上面的返回值为false。所以我做错了什么。让我们忽略一个事实,如果你想准确地检查你发布的内容,比较strpo($su

我有这个:

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

我想测试逗号+空格是否在主题中出现两次或更多。但是,上面的返回值为false。所以我做错了什么。

让我们忽略一个事实,如果你想准确地检查你发布的内容,比较strpo($subject,,')会更有效strrpos($subject,“,”)

您的regexp有两个问题,重复只应用于空格(而不是序列),并且您没有为任何其他字符留出空间,因此您的regexp当前检查主题是否包含

解决这两个问题将导致:

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

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

如果要执行相同的操作,但这次使用正则表达式,请使用以相同方式返回出现次数的

要在模式本身中重复几个字符/标记,需要对它们进行分组。您可以使用非捕获组
(?:…)

如果没有组,则仅重复最后一个标记。(示例中的空格也是如此)

但此模式不描述您的字符串,因为逗号之间还有其他字符,您必须添加它们:

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