我想匹配任何序列或数字,或文字:na。 我正在使用:
"^\d*|na$"
数字正在匹配,但不是na。
我的错误是什么?
更多信息:我在aspnet c#中的文本框的正则表达式验证器中使用它。
空白条目没问题。
答案 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]$"