1

文字列内の特定のパターンを除外するために、C#で正規表現に取り組んでいます。

受け入れたいタイプパターンは次のとおりです。"%00"(Hex 00-FF)および'%'で始まる他の文字。除外したいパターンは、「%0」(開始%と1文字後の値)および/または文字「&<>'/」です。

これまでのところ私はこれを持っています

Regex correctStringRegex = new Regex(@"(%[0-9a-fA-F]{2})|[^%&<>'/]|(^(%.))", 
                                     RegexOptions.IgnoreCase);

以下は、私が合格および却下しようとしているものの例です。

文字列の受け渡し%02This is%0A%0Da string%03
拒否文字列%0%0Z%A&<%0a%

文字列がすべての要件を満たしていない場合は、文字列全体を完全に拒否したいと思います。

どんな助けでも大歓迎です!

4

2 に答える 2

1

私はこれを提案します:

^(?:%[0-9a-f]{2}|[^%&<>'/])*$

説明:

^             # Start of string
(?:           # Match either
 %[0-9a-f]{2} # %xx
|             # or
 [^%&<>'/]    # any character except the forbidden ones
)*            # any number of times
$             # until end of string.

これにより、%2 つの 16 進数が続く場合にのみ一致することが保証されます。すでにフラグを設定して正規表現をコンパイルしているので、IgnoreCase必要もありませんa-fA-F

于 2012-08-02T16:14:48.497 に答える
1

うーん、これまでのコメントを考えると、別の問題定義が必要だと思います。文字列に無効なパターンが含まれているかどうかに基づいて、正規表現を使用して文字列を合格または不合格にしたい。有効なパターンがある場合に文字列を渡すのとは逆ではなく、無効なパターンがある場合に文字列が失敗すると想定しています。

そのため、次の正規表現を使用します。%(?![0-9a-f]{2})|[&<>'/]

次に、一致を取得した場合に文字列が無効になるようにこれを実行します。有効な文字列はこのセットに一致しません。

ちょっと変わった正規表現の簡単な説明。この形式(?!)は、正規表現に「このセットのシンボルが従わない場合は前のシンボルに一致する」ことを伝えます。つまり、接尾辞が存在しない場合に一致します。したがって、検索するように指示しているのは、2 つの 16 進文字またはその他の無効な文字が続いていない % のインスタンスです。この正規表現に一致しないものはすべて、有効な文字エントリであると想定されています。

于 2012-08-02T18:03:12.463 に答える