正则表达管道混乱

时间:2011-06-08 13:20:53

标签: php regex

为什么这段代码会返回true?

要匹配的字符串:ab

模式:/^a|b$/

但是当我把括号放在这样的时候:

模式:/^(a|b)$/

然后它将返回false

5 个答案:

答案 0 :(得分:14)

没有括号的第一个模式相当于/(^a)|(b$)/ 原因是,管道运算符(“交替运算符”)具有所有正则表达式运算符的最低优先级:http://www.regular-expressions.info/alternation.html(第一个标题下面的第三段)

答案 1 :(得分:7)

/^a|b$/匹配以a OR开头且以b结尾的字符串。因此它匹配afoobarbab

/^(a|b)$/:匹配以ab开头和结尾的字符串。因此,它匹配ab,而不是其他任何内容。

这是因为更改|在正则表达式运算符中的优先级非常低。

Related discussion

答案 2 :(得分:4)

第一种方法以a开头,或以b结束。

第二个意味着1个字符,ab

答案 3 :(得分:1)

|的优先级低于锚点,所以你要么说^ab$(这是真的)而不是第二个意思是“单个字符串” ,ab“(这是假的)。

答案 4 :(得分:1)

^a|b$中,您在开头匹配a或在结尾处匹配b

^(a|b)$中,您匹配的是ab是唯一的字符(开头和结尾)。