0

LINQPad (.NET) では、これらの式はすべて「True」を返します。

new Regex(@"\w{0}").IsMatch("aa aa ZZ Z").Dump();
new Regex(@"(\w){0}").IsMatch("aa aa ZZ Z").Dump();
new Regex(@"[\w]{0}").IsMatch("aa aa ZZ Z").Dump();
new Regex(@"([\w]){0}").IsMatch("aa aa ZZ Z").Dump();
new Regex(@"\w{0,0}").IsMatch("aa aa ZZ Z").Dump();
new Regex(@"(\w){0,0}").IsMatch("aa aa ZZ Z").Dump();
new Regex(@"[\w]{0,0}").IsMatch("aa aa ZZ Z").Dump();
new Regex(@"([\w]){0,0}").IsMatch("aa aa ZZ Z").Dump();
new Regex(@"([a]){0,0}").IsMatch("aaaaZZZ").Dump();

なんで?

4

3 に答える 3

6

あなたの計画は、{0}量指定子を使用してソース文字列に特定の文字が存在しないことを確認することであると想定しています。それはこのように機能するつもりはありません。ここでは、{0}量指定子自体は役に立ちません。これは、「前のトークンにゼロ回一致する」ことを意味します。これは、空の文字列も含め、すべての文字列に当てはまります。a{0,5}ゼロは、たとえば0 から 5aの sに一致する場合など、下限としてのみ役立ちます。

正規表現はテキストと一致するように設計されているため、テキストと一致しないようにいくつかのねじれを行う必要があります。例えば:

Regex(@"^\W*$")  // syntactic sugar for Regex(@"^[^\w]*$")

文字列全体が英数字以外の文字で構成されている場合にのみ一致します。

Regex(@"^[^a]*$")

は、文字列全体が 以外の文字で構成されている場合にのみ一致しますa

于 2013-06-10T15:25:09.530 に答える
3

世界のすべての文字列に存在するゼロ幅の文字列に一致するように、各式を試しています。したがって、true を返します。

于 2013-06-10T15:25:00.790 に答える