数字的正则表达式,一些特殊字符和NULL

时间:2014-11-21 07:16:41

标签: c# regex

我想创建一个允许

的正则表达式

0-9
.
>
<
%
,
-
NULL

所以我写了一个像^[0-9.><%,-NULL]*$

这样的正则表达式

匹配NULL,但在用户只输入N时不匹配。所以我做了^[0-9.&gt;&lt;%,-(NULL)]*$,但我做了

string pattern = "^[0-9.&gt;&lt;%,-(NULL)]*$";
Regex.Match("N", pattern).Success;

这会抛出Argument异常并说

`parsing "^[0-9.><%,-(NULL)]*$" - [x-y] range in reverse order.

那么正确的Regex应该是什么?

1 个答案:

答案 0 :(得分:2)

我认为你需要的表达看起来与此相似:

"^([-0-9.><%,]|NULL)*$"

这将匹配字符集(方括号内)和NULL实例中任何字符的零次或多次出现。


制作NULL部分字符集也会分别与NUL字符匹配。尝试使用(NULL)进行分组将不会产生预期的效果,但还会使字符集也与开括号和右括号相匹配。

您提到的错误([x-y] range in reverse order)是由您的表达式

引起的
"^[0-9.><%,-(NULL)]*$"

连字符被视为表示此字符范围: ,-( 。因为括号在逗号之前,所以字符范围被认为是相反的顺序。

要在字符集中表示连字符(-),您需要避免将其解释为表示字符范围。通过将短划线放在字符集的开头或结尾处可以轻松实现这一点。