preg_match命名子模式 - 可选键

时间:2013-04-28 18:16:01

标签: php regex preg-match

现在尝试了几个小时,但现在我承认我被困住了。

我正在尝试匹配一个简单框架的url模式。

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

这适用于没有斜线的网页,但我希望将控制器/操作等网址与可选键匹配

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

这是问题所在。我无法弄清楚如何使用前面的斜杠制作'action'键是可选的。

1 个答案:

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

?:开头的群组是非捕获群组。