2

我的应用程序中的正则表达式有一点问题。我有以下代码适用于所有模式,而不仅仅是'/':

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

当我$pattern1使用 /line-up 或 /line-up/opening 并$pattern2使用 /line-up/opening 时,它按预期工作。但是当我只有 '/' as 时它也匹配$pattern1。我能做些什么来防止匹配'/',但让它仍然匹配其他提到的模式?

4

2 回答 2

2

您想匹配确切的字符串吗?例如

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

然后你可以使用^and $

#^$pattern1/?#

但如果你想匹配/line-up, /line-up/, /line-up/foobar, 等。它行不通。你做不到。

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

于 2012-07-18T21:10:25.413 回答
1

我找到了解决我的问题的方法。我必须再次根据模式检查找到的匹配项。

if (preg_match("#". $menuRoute->getPattern() . "(/.+)?#", $route->getPattern(), $matches)) {
    if (isset($matches[0]) && $matches[0] == $route->getPattern()) {
    $topActive = TRUE;
    }
}
于 2012-07-18T21:21:21.063 回答