2

フォルダ文字(/)がない、または拡張子(.aspx)で終わるURLのリクエストに一致させようとしています。今のところ、正規表現のクエリ文字列値とフラグメントは無視できます。これまでのところ、私は次のものを持っています。

^([\w-/]+)(?!\.aspx|/)$

ただし、この式を実行すると、グループ内で実行したくない最後の/が選択されます。目標は、Isapi ReWriteを使用して指定されていないURLに.aspxを追加してから、要求を.NETエンジンに転送することです。

以下の例は、現在の試合のすべてのキャラクターを太字で示しています

asd.aspx
this
something.aspx
this / test / (finalが必要ない/)
this-test / (finalが必要ない/)
this-test
this-test / that / test

式に見つかった場合、最後の/を選択しない式を誰かが提案できますか?

4

4 に答える 4

4

後読みアサーションを試してください。

^([\w-/]+)(?<!/|\.aspx)$
于 2009-11-18T09:32:49.263 に答える
1

最初の文が正規表現や例と一致しません。
あなたが欲しいように私には思えます:

  1. 文字列がで終わる場合は、.aspxそれ以上処理しないでください。
  2. それ以外の場合、文字列が/そのスラッシュを削除して終了する場合。
  3. 文字列を処理します。

正規表現でやりすぎているのではないでしょうか。

拡張子(.aspx)を明示的にテストしてみませんか。それがない場合は、文字列を追加処理する前に、ターミナルスラッシュを検出して削除してください。

つまり、1と2を実行する、負の先読みを使用した正規表現を作成することは可能であると確信していますが、明示的に作成する方が明確ではありません。

さらにいくつかの例をテストすることもできます。

foo/bar/.aspx
foo/bar.aspx/
foo.aspx/bar
foo.aspx/bar/

出力として何を期待しているのかを確実に理解するためです。

于 2009-11-18T10:05:38.437 に答える
1

/をグループの外に移動します():

^([\w-/]+)(?!\.aspx)/?$
于 2009-11-18T09:29:11.920 に答える
0

正規表現から/を削除して外部に追加し、0回または1回出現できるように指定します。

^([\ w-/] +)(?!。aspx)(/){0,1} $

于 2009-11-18T09:31:23.370 に答える