2016-04-06 11 views
2

パラメータを欠いているURLに末尾のスラッシュを追加したいと考えています。これは、このフィルタを使用して行われるべきである:http://www.tuckey.org/urlrewrite/すなわちTuckeyのURL書き換えフィルタを使用して、URLに末尾のスラッシュを追加してください。

  • /web/guest/web/guest/
  • /web/guest?なるべき /web/guest/?
  • /web/guest/?を が
  • /web/guest?test=1を変更すべきではないべきでなるはず になる
  • /web/guest/anything/は URLはパラメータはありませんが、いくつかがある場合、私は、一致する正規表現を見つけることができないときは簡単です

を変更すべきではありません。

は、ここで私は(exemplesとユニットテストを持つ)を考え出すことができるものです:https://regex101.com/r/qU3rP3/2

^\/(.+\/[^\/]+?)(\?.*)?$ 

/$1/$2に置き換え。期待される結果が得られません。あなたの助け

+0

'/ web/guest /?test = 1'は正しいですか? –

+0

'/ web/guest /? 'に予期した動作が指定されていません。それは '/ web/guest /?/'か '/ web/guest /? 'でしょうか? 2番目の場合は、 '$ 1/$ 2'で置き換えるために['([^ /?])$ |([?] [^ /] +) '](https://regex101.com/r/nS8yK4/1) 。最初の場合、['([^ /])$ |([?] [^ /] +) '](https://regex101.com/r/nS8yK4/2) –

+0

@noobはい、これは正しい –

答えて

2

ため

おかげであなたは

([^/?])$|/?([?].*) 

$1/$2と交換し使用することができます。

regex demoを参照してください。

パターンには2つの選択肢が含まれており、グループ1と2に取り込みます。次に、置換パターンでは、$1$2の後方参照を使用してこれらの取り込み値を参照します。

詳細:

  • ([^/?])$ - マッチし、グループ1に任意の文字をキャプチャしますが、文字列
  • |の終わりに/または? - または
  • /? - オプション(1または0 )スラッシュ
  • ([?].+) - グループ2にリテラル?と一致してキャプチャし、その後に改行以外の1文字以上

この置換は、参加していないキャプチャグループが一致した後に空の文字列で埋められるため、1つのキャプチャグループが空の場合でも機能します。

+0

ありがとう、それはうまくいくようです! –

+0

私は再確認しました。パターンは['([^ /?])$ | /?([?]。*)'](https://regex101.com/r/rF7nF6/2) )。ご確認ください。 –

+0

あなたは実際に正しいです。間違いに気付かなかったそれをもう一度確認していただきありがとう –

関連する問題