我想创建一个允许
的正则表达式 0-9
.
>
<
%
,
-
NULL
所以我写了一个像^[0-9.><%,-NULL]*$
匹配NULL,但在用户只输入N
时不匹配。所以我做了^[0-9.><%,-(NULL)]*$
,但我做了
string pattern = "^[0-9.><%,-(NULL)]*$";
Regex.Match("N", pattern).Success;
这会抛出Argument异常并说
`parsing "^[0-9.><%,-(NULL)]*$" - [x-y] range in reverse order.
那么正确的Regex应该是什么?
答案 0 :(得分:2)
我认为你需要的表达看起来与此相似:
"^([-0-9.><%,]|NULL)*$"
这将匹配字符集(方括号内)和NULL
实例中任何字符的零次或多次出现。
制作NULL
部分字符集也会分别与N
,U
和L
字符匹配。尝试使用(NULL)
进行分组将不会产生预期的效果,但还会使字符集也与开括号和右括号相匹配。
您提到的错误([x-y] range in reverse order
)是由您的表达式
"^[0-9.><%,-(NULL)]*$"
连字符被视为表示此字符范围: ,-(
。因为括号在逗号之前,所以字符范围被认为是相反的顺序。
要在字符集中表示连字符(-
),您需要避免将其解释为表示字符范围。通过将短划线放在字符集的开头或结尾处可以轻松实现这一点。