如何在最后将字符串与可选的“/”匹配?

时间:2011-10-02 13:53:17

标签: php regex

我正在尝试匹配诸如;

之类的网址

http://www.testing.com/documents/dashboard

我想要的是匹配“/ documents / dashboard”或“/ documents / dashboard /”。怎么可以这样做?

preg_match('/^\/documents\/dashboard[\/|]$/i', $_SERVER['REQUEST_URI']);

这不起作用?我应该在[]块中的管道(|)字符之后输入什么来覆盖“无”?

2 个答案:

答案 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