在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)
为什么?
我假设您的计划是通过使用{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.