我被困在正则表达式上。我有一个字符串,应该以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';
}
非常感谢任何协助。
谢谢。
答案 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