我在PHP中有一堆正则表达式,第一个子句是:

if (preg_match('#^/index#i', $_SERVER['REQUEST_URI']) || preg_match('#^/(ACT)|(NSW)|(NT)|(QLD)|(SA)|(TAS)|(VIC)|(WA)/$#i', $_SERVER['REQUEST_URI'])){


现在,说$_SERVER['REQUEST_URI']等于/VIC/events/;出于某种原因,这与第一个子句匹配。为什么?当我添加行字符/VIC/的末尾时,不是仅当它等于$时才匹配吗?

最佳答案

您需要在替换项之间加上括号:

'#^/(ACT|NSW|NT|QLD|SA|TAS|VIC|WA)/$#i'


不带括号的^a|b|c$表示(^a)|b|(c$),这不是您想要的。

关于php - 为什么此正则表达式匹配不正确的模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13930037/

10-12 05:27