我在我的應用程序中有一個小問題,我有以下的代碼,針對所有模式運作良好,這不只是「/」: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