URL路由 - 正则表达式与尾部斜杠匹配,没有

时间:2014-09-12 20:14:43

标签: php regex router

我正在使用Spiffy-Route库来路由我的网址。一切都很棒,能够自由地路由所需的网址,但我真的无法添加通配符,因为它不包含在api中。

我的路线如下:

/{id:\d+}-{string}

意味着我可以像这样路由到它:

.com/5-helloworld

但是当我这样路由时:

.com/5-helloworld/

由于斜线,它找不到匹配项。我已经尝试过/{id}-{string}/?,但参数{string}将包含它内部的所有斜杠。

我一直在浏览stackoverflow上的一些 Regex 问题,以了解如何使用斜杠和不使用斜线模式支持 - 常见的答案是([^/]+),但这段正则表达式在我的情况下根本没有影响。

如何使用Spiffy路由器执行此操作?

如果我执行/{id}-{string}([^/]+)/?之类的操作,请按照以下方式进行操作:/5-hey/

根据此回音,输出将为5he而不是5hey

echo parent::getRouteMatch()->get('id') . parent::getRouteMatch()->get('string');

我是否需要修改API才能使其正常工作?

1 个答案:

答案 0 :(得分:2)

[^/]意味着除了正斜杠之外的任何东西。怎么样:

/{id:\d+}-{string:[^/]+}\/?

我应该注意我也不认识Spiffy。正确的正则表达式应该可以工作。

如果要在斜杠后允许字符串,请使用.*允许和丢弃,或重复{string:[^/]+以捕获(在这种情况下将字符串替换为其他名称) )