2016-07-19 3 views
1

私は.NETで有効な正規表現パターンを持っている:クエリ文字列がparam1=value1 IIS UrlRewrite正規表現の違い

  • しかしparam2=が含まれていないが含まれてい

    • :あれば一致する

      (?>.*param1=value1.*)(?<!.*param2=\d+.*)番号

    .NETで動作します。しかし、IIS URLRewriteは、それが有効なパターンではないと不満を表明します。

    IIS URLRewriteで式(?<! )の背後にゼロ幅の負の表情を使用できませんか?

    私は両方のweb.configファイルでこのパターンを適用しようとしました。注(適切にそれぞれ&lt;<>を変更し&gt;だけでなく、IISマネージャで - すべての成功なし

  • +1

    '^(?!。* param2 = \ d)。* param1 = value1'と単純化できませんか?または、文字列全体をマッチさせる必要がある場合は、 '。*': '^(?!。* param2 = \ d)。* param1 = value1。*' –

    +0

    @WiktorStribiżewありがとう!これは動作します!しかし、その違いについては疑問が残っています。私は、使用された2つのRegExエンジンは同等であると考えました。 –

    +0

    いいえ、ご覧のとおり、構文が異なります。 –

    答えて

    1

    IIS URLRewriteのデフォルトの正規表現の構文。それは、.NET正規表現構文との互換性はありませんのECMAScriptは、あるURL Rewrite Module Configuration Referenceを参照してください。

    ECMAScript - Perlの互換性(ECMAScript標準準拠)正規表現を。構文。これは任意のルールのデフォルトオプションです。

    あなたが唯一の先読みに依存する必要がありますが、全く後読みを使用することはできません。

    ^(?!.*param2=\d).*param1=value1.* 
    

    パターンの説明

    • ^ - 文字列の先頭
    • (?!.*param2=\d) - param2=に数字(\d)が続く場合は、改行以外の0+の文字が一致して失敗した後
    • .*param1=value1.*(一致を返さない) - param1=value1

    が含まれている行全体と一致しますが、このルールを高めることができるだけにparam1=value1周り\bを追加すると、それに一致することにより、単語全体。