首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PCRE匹配“无”

PCRE匹配“无”
EN

Stack Overflow用户
提问于 2013-12-17 05:14:17
回答 2查看 124关注 0票数 1

我正在尝试将我的应用程序uri与一组路由相匹配,对于默认路由,我考虑允许bb.com/homebb.com/ (空)作为第一个uri段上允许的选项,对于第二个uri段也是如此。我不确定我检查空值的方式是最好的:

代码语言:javascript
复制
#^/?(?P<controller>([.*]{0}|home))(?:/(?P<action>([.*]{0}|test)))?/?$#uD

注意[.*]{0}

有更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-17 05:35:09

你可以让它变懒:.*?,它每次都不应该匹配任何东西。

而且,你不需要有那么多的捕获组。您甚至在命名的捕获组中有一个编号捕获组。这就是我写表达式的方式:

^/?(?P<controller>.*?|home)/(?P<action>.*?|test)/?$

这保留了两个命名的捕获组,但是去掉了嵌套的编号捕获组和非捕获组,这是不必要的。

票数 2
EN

Stack Overflow用户

发布于 2013-12-17 05:31:59

通过将.*放在字符类[]中,您要求匹配一个文字点.和文字*,而不是能够匹配任何字符(换行符除外)的点,并且*可以充当量词。

通过使用{0}范围量词,这与0时间(token is being ignored)完全匹配。你不会得到你期望的结果,他们也不需要这样做。

您可以简单地为一个非贪婪的匹配添加?,并在这里删除多余的捕获组。

代码语言:javascript
复制
~^/?(?P<controller>.*?|home)/(?P<action>.*?|test)/?$~i

但是,考虑一下这是如何工作的,您说过您希望允许bb.com/home,这也将匹配您可能不想要的模式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20626409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档