我在我的应用程序中有一个小问题,我有以下的代码,针对所有模式运作良好,这不只是“/”:PHP的正则表达式
if (preg_match("#". $pattern1 . "(/.*+)?#", $pattern2)) {
$topActive = TRUE;
}
当我有$pattern1
与/阵容或/阵容/开$pattern2
与/阵容/按预期开放它。但它也匹配时,我只是'/'为$pattern1
。我能做些什么来防止与'/'匹配,但让它仍然与其他提到的模式匹配?
我在我的应用程序中有一个小问题,我有以下的代码,针对所有模式运作良好,这不只是“/”:PHP的正则表达式
if (preg_match("#". $pattern1 . "(/.*+)?#", $pattern2)) {
$topActive = TRUE;
}
当我有$pattern1
与/阵容或/阵容/开$pattern2
与/阵容/按预期开放它。但它也匹配时,我只是'/'为$pattern1
。我能做些什么来防止与'/'匹配,但让它仍然与其他提到的模式匹配?
我找到了解决我的问题的方案。我必须再次检查发现的匹配模式。
if (preg_match("#". $menuRoute->getPattern() . "(/.+)?#", $route->getPattern(), $matches)) {
if (isset($matches[0]) && $matches[0] == $route->getPattern()) {
$topActive = TRUE;
}
}
你想匹配确切的字符串?例如。
| $pattern1 | $pattern2 |
| /line-up | /line-up/ or /line-up |
然后你可以使用^
和$
:
#^$pattern1/?#
但是,如果你想匹配/line-up
,/line-up/
,/line-up/foobar
,等。它不会工作。你不能做到。
我想你想要这个路由?我认为最好的选择是将最短路线(/
)放在最前面,最长路线(/line-up
)。
我有安装路由,工作得很好,但现在我想在我的菜单结构中得到一些控制。为此,我想检查当前模式(例如/ line-up/opening)是否与菜单项的模式匹配。但菜单条目不仅可以/排队/打开,还可以/并且/排队/整理。对于/阵容/整理它的作品(它不匹配),但我的问题是'/'。 – 2012-07-18 21:14:30
(/.*+),*表示任何数量的字符(包括0)的,+是指多于或等于1块炭,你似乎在这里把它们组合起来? – craig1231 2012-07-18 21:12:53
感谢您的建议。我纠正了它);但它不影响其余的问题。 – 2012-07-18 21:18:59