2011-10-02 39 views
1

我想匹配一個URL,如;如何在最後匹配一個帶有可選「/」的字符串?

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

我想是要匹配 「/文件/儀表板」 或 「/文件/儀表/」。如何做到這一點?

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

這不行?我應該在[]塊中的管道(|)字符之後輸入什麼以覆蓋「無」?

+0

http://stackoverflow.com/search?q=url+regex – Incognito

+0

對不起,我是配合緊密太倉促選項,無視這一點。 – Incognito

+0

「This does not work」>。< –

回答

3

[\/|]$是錯誤的,因爲[]創建一個字符類。所以你匹配的是/|,後面跟着字符串的結尾。做你所想的:

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

雖然我認爲它更易於使用:

preg_match('~^/documents/dashboard/?$~', $_SERVER['REQUEST_URI']); 

/?指1或0次匹配/字符。

提示:如果使用/以外的分隔符,則不必在模式中轉義正斜槓。

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

人們經常在它們的正則表達式的末尾使用它,但它實際上可以在任何地方使用。雖然在你的情況下,使用?量詞更簡單。

或者,如果你絕對要使用$,下面將工作太:

/^\/documents\/dashboard(\/|$)$/i 
+1

''''''''中的'''就像一個普通字符一樣行爲http://ideone.com/gkzLp – zerkms

+0

哦,是的。更好地使用'(\/| $)$'。但是在那種情況下使用'?'更簡單。 – Artefact2

+0

不,它不是,如果你刪除'/ documents/dashboard/blabla'也會匹配。 – Artefact2

相關問題