我正在尝试匹配诸如;
之类的网址http://www.testing.com/documents/dashboard
我想要的是匹配“/ documents / dashboard”或“/ documents / dashboard /”。怎么可以这样做?
preg_match('/^\/documents\/dashboard[\/|]$/i', $_SERVER['REQUEST_URI']);
这不起作用?我应该在[]块中的管道(|)字符之后输入什么来覆盖“无”?
答案 0 :(得分:3)
[\/|]$
错误,因为[]
会创建一个字符类。所以你匹配的是/
或|
后跟字符串结尾。做你想的事情:
preg_match('~^/documents/dashboard(/|$)$~', $_SERVER['REQUEST_URI']);
虽然我觉得它更容易使用:
preg_match('~^/documents/dashboard/?$~', $_SERVER['REQUEST_URI']);
/?
表示匹配/
字符1或0次。
提示:如果使用/
以外的分隔符,则不必在模式中转义正斜杠。
答案 1 :(得分:0)
preg_match('/^\/documents\/dashboard\/?$/i', $_SERVER['REQUEST_URI']);
人们经常在他们的正则表达式结束时使用它,但它实际上可以在任何地方使用。虽然在您的情况下,使用?
量词更简单。
或者,如果您绝对想要使用$
,以下内容也可以使用:
/^\/documents\/dashboard(\/|$)$/i