.NET正则表达式:{0}量词是否有效?

Win*_*ter 0 c# regex

在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();
Run Code Online (Sandbox Code Playgroud)

为什么?

Tim*_*ker 6

我假设您的计划是通过使用{0}量词来确保源字符串中不存在某个字符.这不会像这样工作.该{0}量词本身是无用的在这里-它的意思是"匹配以前标记零周时间".这适用于所有字符串,甚至是空字符串.零仅作为下限有用,例如a{0,5}匹配0到5 a秒.

正则表达式旨在匹配文本,因此您需要经历一些扭曲以使它们与文本不匹配.例如:

Regex(@"^\W*$")  // syntactic sugar for Regex(@"^[^\w]*$")
Run Code Online (Sandbox Code Playgroud)

仅当整个字符串由非字母数字字符组成时才匹配.

Regex(@"^[^a]*$")
Run Code Online (Sandbox Code Playgroud)

仅当整个字符串由除以外的字符组成时才匹配a.