2012-04-23 5 views
2

IIS7でURLリライタルールを作成しようとしています。正規表現を使用すると、特定の文字が最後にあるかどうかを取り除く方法はありますか?

ギャラリー/サッカー(ノー提供スラッシュので、これは動作します)

ギャラリーは/(、この場合にはスラッシュをキープWORKS)/{R:1}.aspx?cat={R:2}

ポリシーは/: 私の現在のREG式がある^(policy|pricing|contact|gallery)/(.*) 私の書き換えルールがありますサッカー/は任意のアイデアは素晴らしいことだ(最後のスラッシュを削除する必要があります)/

ギャラリー/サッカー/女の子(最後のスラッシュを削除する必要があります)私は.Netのような言語でこの方法にどのようにアプローチするのか知っていますが、厳密にIISの正規表現ルールとしてこれを行う必要があります。私は次のように動作するはずだと思う

答えて

1

^(policy|pricing|contact|gallery)/(.*?)/?$ 

/?終わりには「/ 1または0回にマッチ」を意味し、または他の言葉で、それはオプションです。 /がまだ.*で消費されているため、最後にこれを追加するだけでは機能しないため、.*.*?に変更して貪欲にならないようにする必要があります。

$アンカーは一致が早すぎるように終了する必要があります。

末尾の/は引き続き一致しますが、2番目のキャプチャグループの一部ではないため、書き換えルールが正しく機能するはずです。

それは作業を参照してください:http://www.rubular.com/r/s8IqIlaqoz

+0

を働くかもしれない、あなたのソリューションをありがとう! – NYTom

+0

@NYTom - 答えの横にあるチェックマークの輪郭をクリックすることで、あなたが一番良いと思う([回答を受け入れる])必要があります(http://meta.stackexchange.com/a/5235/155356)。 –

0

私はあなたが明示的に(あなたがそうしていないように見えるので、私は/をエスケープしていない)最後にそれを置く場合は、あなたが効果的に再でそれを削除することを考えますそのグループを含まないことによって書き込む。

^(policy|pricing|contact|gallery)/(.*)/?$ 

$を添加することによって、我々は、最終的なスラッシュが除去されることを保証されている - まだNフォワードの間にスラッシュが存在し得ます。

+0

私はそれを試してみました、問題はまだ/を最後に含んでいますか? 0回以上である。 +(1回以上)を使用すると、スラッシュが削除されますが、入力文字列の末尾にスラッシュがない場合は、+が1以上のように表示されますキャッチ22の問題。 – NYTom

2

これは、これはあまりにも動作します

^(policy|pricing|contact|gallery)/([^/]*(?:/[^/]+)*) 
+0

それは完璧に、ありがとう! – NYTom

関連する問題