正規表現で、特定の文字セットに関連付けられた文字を受け入れながら、他のいくつかの文字を否定する方法があるかどうか疑問に思っていましたか?
たとえば、 letterと digit\w
を除くすべての文字、数字、アンダースコア ( ) を受け入れたい場合を考えてみましょう。それを達成するための簡単な方法はありますか?理想的には、 に似たものが欲しいのですが、この特定のものではうまくいかないことはわかっています。e
1
^[\w^e1]$
これは、文字クラスの減算によって実現できます。
[base_group-[excluded_group]]
この形式を使用すると、パターンを使用して、文字と数字^[\w-[e1]]$
を除くすべての英数字を照合できます。e
1
string[] inputs =
{
"a", "b", "c", "_", "2", "3",
" ", "1", "e" // false cases
};
string pattern = @"^[\w-[e1]]$";
foreach (var input in inputs)
{
Console.WriteLine("{0}: {1}", Regex.IsMatch(input, pattern), input);
}
Ahmad の解決策より移植性e
は高いが簡潔ではない方法は、 andを除外する文字クラスを定義すること1
です。
[a-df-zA-DF-Z02-9]
期待どおりに動作するはずです。