为什么这个正则表达式匹配不正确的模式?

Bre*_*ett 2 php regex preg-match

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

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

现在,说$_SERVER['REQUEST_URI']等于/VIC/events/; 这是出于某种原因与第一个条款相匹配.为什么?如果它等于/VIC/我添加行尾字符时,它不应该只匹配$吗?

Mar*_*ers 5

您需要在轮换周围使用括号:

'#^/(ACT|NSW|NT|QLD|SA|TAS|VIC|WA)/$#i'
Run Code Online (Sandbox Code Playgroud)

没有括号^a|b|c$意味着(^a)|b|(c$)什么不是你想要的.