我正在尝试将我的应用程序uri与一组路由相匹配,对于默认路由,我考虑允许bb.com/home或bb.com/ (空)作为第一个uri段上允许的选项,对于第二个uri段也是如此。我不确定我检查空值的方式是最好的:
#^/?(?P<controller>([.*]{0}|home))(?:/(?P<action>([.*]{0}|test)))?/?$#uD注意[.*]{0}
有更好的方法吗?
发布于 2013-12-17 05:35:09
你可以让它变懒:.*?,它每次都不应该匹配任何东西。
而且,你不需要有那么多的捕获组。您甚至在命名的捕获组中有一个编号捕获组。这就是我写表达式的方式:
^/?(?P<controller>.*?|home)/(?P<action>.*?|test)/?$
这保留了两个命名的捕获组,但是去掉了嵌套的编号捕获组和非捕获组,这是不必要的。
发布于 2013-12-17 05:31:59
通过将.*放在字符类[]中,您要求匹配一个文字点.和文字*,而不是能够匹配任何字符(换行符除外)的点,并且*可以充当量词。
通过使用{0}范围量词,这与0时间(token is being ignored)完全匹配。你不会得到你期望的结果,他们也不需要这样做。
您可以简单地为一个非贪婪的匹配添加?,并在这里删除多余的捕获组。
~^/?(?P<controller>.*?|home)/(?P<action>.*?|test)/?$~i但是,考虑一下这是如何工作的,您说过您希望允许bb.com/home,这也将匹配您可能不想要的模式。
https://stackoverflow.com/questions/20626409
复制相似问题