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

时间:2015-07-05 10:01:49

标签: php preg-match

我有这个:

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

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

2 个答案:

答案 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,}