2

アプリケーションの正規表現に少し問題があります。「/」だけでなく、すべてのパターンでうまく機能する次のコードがあります。

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

$pattern1/line-up または /line-up/opening と/ $pattern2line-up/opening を使用すると、期待どおりに動作します。しかし、「/」だけの場合にも一致し$pattern1ます。「/」との一致を防ぐにはどうすればよいですか?

4

2 に答える 2

2

正確な文字列に一致させたいですか?例えば

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

^次に、次を使用できます$

#^$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 に答える