我在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/