如果超过4个管道字符,如何使regex失败


How to get regex to fail if more than 4 pipe characters

我被正则表达式卡住了。我有一个字符串,它应该以几个值开头,用4个管道|字符分隔。我只想让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';
}

如有任何协助,我们将不胜感激。

谢谢。

[^|]*s:替换.*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';
}

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

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

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