2013-04-28 54 views
0

現在嘗試幾個小時,但現在我承認我卡住了。preg_match命名的子模式 - 可選鍵

我想匹配一個簡單的框架的網址模式。

$url = 'controller'; 
preg_match('/(?P<controller>\w+)/', $url, $matches); 

這適用於網頁沒有斜線,但我想用可選的鍵

$url = 'controller/action'; 
preg_match('/(?P<controller>(?P<action>)?\w+)/', $url, $matches); 

匹配諸如控制器/操作URL這是問題所在。我無法弄清楚如何使斜槓前面的'動作'鍵成爲可選項。

回答

2

嘗試

preg_match('/(?P<controller>\w+)(?P<action>\/\w+)?/', $url, $matches); 

,你必須符合最初的第一部分(?P<controller>\w+),然後關閉捕獲組。然後這部分您的可選部分開始(?P<action>\/\w+)?包括斜線和再次\w+

如果你不想在截取部分的斜線,放了第二組周圍是可選的,從捕獲組移動斜線可選一個:

preg_match('/(?P<controller>\w+)(?:\/(?P<action>\w+))?/', $url, $matches); 

A組開始?:是一個非捕獲組。

+0

它的工作:)行動匹配爲'/富',有沒有辦法省略斜槓 – user2329731 2013-04-28 18:27:51

+0

我已經擴展了我的答案。 – stema 2013-04-28 18:28:17

+0

謝謝!這很混亂。我可能永遠不會自己拿到它。 – user2329731 2013-04-28 18:31:30