正则表达 - 我的错误是什么?

时间:2009-07-30 17:06:56

标签: regex

我想匹配任何序列或数字,或文字:na。 我正在使用:

"^\d*|na$"

数字正在匹配,但不是na。

我的错误是什么?

更多信息:我在aspnet c#中的文本框的正则表达式验证器中使用它。

空白条目没问题。

4 个答案:

答案 0 :(得分:9)

这是因为正在读取表达式(假设PCRE):

"^\d*" OR "na$"

有些括号会用jiff来处理。选择(根据您的需要):

"^(\d+|na)$"    // this will capture the number or na
"^(?:\d+|na)$"  // this one won't capture

干杯!

答案 1 :(得分:6)

|运算符的优先级高于锚点^$。因此,表达式^\d*|na$表示匹配^\d*na$。所以试试这个:

^(\d*|na)$

或者:

^\d*$|^na$

答案 2 :(得分:1)

也许^(?:\d*|na)$会更好。什么语言/引擎?此外,请显示输入,如果可能,请显示代码的片段。

此外,您可能不匹配“na”,因为后面有一个新行。数字不会受到影响,因为您没有为它们指定$ anchor。

因此,根据语言和获取输入的方式,“na”和字符串结尾之间可能存在换行符,除非您启用多行匹配,否则$将不匹配(或剥去新行的字符串。)

答案 3 :(得分:-2)

这可能不是最佳或最优雅的解决方法,但请尝试以下方法:

"^\d*|[n][a]$"