2014-02-14 87 views
0

炸響路由如何引爆一個laravel經常在Laravel4

Route::getCurrentRoute()->getActionName() // [email protected] 

成數組表達式:命名空間,控制器,方法,行動

我創建了EXPR:

(.*)\\(.*)[email protected](get|post|put|delete|patch)(.*) 

但它不適用於所有路線

Admin\[email protected] 
Admin\[email protected] 
Other\Namespace\Admin\[email protected] 
Admin\[email protected] 
Admin\[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

http://regexr.com?389rh 它不適用於最後4項。

+1

這將是因爲您的\\在您的正則表達式中不是可選的。讓它成爲可選的,它也可以用於最後4個。 – Tularis

+0

哈哈哈:)我忘了?選項:) 完全正確的正則表達式是: (。* \\\)?(。*)Controller @(get | post | put | delete | patch)(。*) – BlueMan

+0

取決於您想要允許的/或捕獲)。 (。* \\)?匹配任何(或者什麼都沒有),然後匹配任何東西(或者什麼也不匹配)。或者什麼也沒有。雖然(。+)\\?(。*)會匹配任何東西(或沒有任何內容),然後匹配一個可選的斜線,然後匹配任何內容(或者什麼都不)。換句話說:兩者都做同樣的事情。然而,在第一場比賽中,你們抓住了\,而我的球員根本沒有抓住\(根據OP的正則表達式) – Tularis

回答

0

它不匹配最後4個項目,因爲項目在控制器之前不包含\。您的正則表達式需要他們擁有它,並因此不符合它。答案是通過使用一個? (= 0或1次出現),如下所示:

(.*)\\?(.*)[email protected](get|post|put|delete|patch)(.*) 

在旁註中,您確定控制器沒有特定名稱嗎?即。一個名爲「Controller」的控制器也將與您的正則表達式匹配。要禁止(並且只允許[something] Controller),您可以將2nd。*更改爲。+(從0或更多匹配到1或更多匹配)。像這樣:

(.*)\\?(.+)[email protected](get|post|put|delete|patch)(.*) 

併爲你的方法同樣的事情(讓|文章|等):

(.*)\\?(.+)[email protected](get|post|put|delete|patch)(.+) 
0

假設控制器

\[email protected](get|post|put|delete|patch)(.*) 
之前,你不會有任何的空間圍在那裏

使用.*而不是\S+也可以。

+0

它不會,因爲我不想在「控制器」之前「切斷」每一個字符串。我想在Controller之前剪下一個字符串,但是不會太遠,直到\。應該使用其他剪切表達式。 – BlueMan