如果超过4个管道字符,如何使正则表达式失败

时间:2013-11-21 03:26:01

标签: php regex

我被困在正则表达式上。我有一个字符串,应该以4个管道|字符分隔的几个值开头。我想让正则表达式做的就是告诉我是否有更多或更多的管道。如果有少于4个管道,正则表达式可以正常工作,但是当有更多管道时仍继续给出正面,即使我认为我有基本上需要的东西,“其余部分不再需要管道。”

我希望以下示例失败,但它仍然返回true:

$string = 'a|b|c|d|e|f';

if (preg_match('/^.*\|.*\|.*\|.*\|[^\|]+$/u', $string)) {
    echo 'Four pipes at beginning';
}
else {
    echo 'not enough or too many pipes';
}

非常感谢任何协助。

谢谢。

2 个答案:

答案 0 :(得分:3)

.*替换为[^|]* s:

$string = 'a|b|c|d|e|f';

if (preg_match('/^[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^\|]*$/u', $string)) {
    echo 'Four pipes at beginning';
}
else {
    echo 'not enough or too many pipes';
}

你的最后一个是正确的,但前四个.*将匹配包含管道符号的字符串。请注意,原始正则表达式末尾的+最后需要一个字符。如果您真的只想检查管道数量,则应使用*代替。

答案 1 :(得分:0)

它不会失败,因为你使用。*匹配每个字符。 试试这个:

/^([a-z])\|([a-z])\|([a-z])\|([a-z])\$/u