正则表达式错误匹配

时间:2013-07-02 14:27:19

标签: .net regex

这个正则表达式:

^[a-zA-Z0-9 -.,()/\n/\r]+$  
.NET中的

始终匹配

“#”或“$”或“!”或“%”或“&”或“*”或“+”

所以要清楚,这一行:

Regex.IsMatch("!", @"^[a-zA-Z0-9 -.,()/\n/\r]+$");

返回true。为什么会这样?

2 个答案:

答案 0 :(得分:10)

-在字符类中使用时会描绘范围

因此,您要尝试匹配space.

之类的字符

-移至字符类的结尾或开头,或将其\-

转义

现在提到ascii table,您指定的范围从ascii十进制值32到46,其中包括!"#$,{ {1}} ........


所以,它应该是

%

^[-a-zA-Z0-9 .,()/\n/\r]+$ 
  ^

或逃避它

^[a-zA-Z0-9 .,()/\n/\r-]+$   
                      ^

答案 1 :(得分:2)

字符类中的连字符需要在第一个位置或最后位置,否则需要进行转义。它应该工作:

^[a-zA-Z0-9 .,()/\n/\r-]+$ 

或者:

^[-a-zA-Z0-9 .,()/\n/\r]+$ 

或者:

^[a-zA-Z0-9 \-.,()/\n/\r]+$