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,}
我有这个:
$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,}