现在尝试了几个小时,但现在我承认我被困住了。
我正在尝试匹配一个简单框架的url模式。
$url = 'controller';
preg_match('/(?P<controller>\w+)/', $url, $matches);
这适用于没有斜线的网页,但我希望将控制器/操作等网址与可选键匹配
$url = 'controller/action';
preg_match('/(?P<controller>(?P<action>)?\w+)/', $url, $matches);
这是问题所在。我无法弄清楚如何使用前面的斜杠制作'action'键是可选的。
答案 0 :(得分:3)
尝试
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);
以?:
开头的群组是非捕获群组。