1

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

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

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

这适用于没有斜杠的页面,但我想将控制器/操作等 URL 与可选键匹配

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

这是问题所在。我不知道如何使前面带有斜线的“动作”键成为可选的。

4

1 回答 1

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

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

于 2013-04-28T18:22:02.300 回答