2012-07-18 86 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