2012-07-18 60 views
2

我在我的应用程序中有一个小问题,我有以下的代码,针对所有模式运作良好,这不只是“/”:PHP的正则表达式

if (preg_match("#". $pattern1 . "(/.*+)?#", $pattern2)) { 
    $topActive = TRUE; 
} 

当我有$pattern1与/阵容或/阵容/开$pattern2与/阵容/按预期开放它。但它也匹配时,我只是'/'为$pattern1。我能做些什么来防止与'/'匹配,但让它仍然与其他提到的模式匹配?

+2

(/.*+),*表示任何数量的字符(包括0)的,+是指多于或等于1块炭,你似乎在这里把它们组合起来? – craig1231 2012-07-18 21:12:53

+0

感谢您的建议。我纠正了它);但它不影响其余的问题。 – 2012-07-18 21:18:59

回答

1

我找到了解决我的问题的方案。我必须再次检查发现的匹配模式。

if (preg_match("#". $menuRoute->getPattern() . "(/.+)?#", $route->getPattern(), $matches)) { 
    if (isset($matches[0]) && $matches[0] == $route->getPattern()) { 
    $topActive = TRUE; 
    } 
} 
2

你想匹配确切的字符串?例如。

| $pattern1 | $pattern2    | 
| /line-up | /line-up/ or /line-up | 

然后你可以使用^$

#^$pattern1/?# 

但是,如果你想匹配/line-up/line-up//line-up/foobar,等。它不会工作。你不能做到。

我想你想要这个路由?我认为最好的选择是将最短路线(/)放在最前面,最长路线(/line-up)。

+0

我有安装路由,工作得很好,但现在我想在我的菜单结构中得到一些控制。为此,我想检查当前模式(例如/ line-up/opening)是否与菜单项的模式匹配。但菜单条目不仅可以/排队/打开,还可以/并且/排队/整理。对于/阵容/整理它的作品(它不匹配),但我的问题是'/'。 – 2012-07-18 21:14:30