什么是匹配除1,2和25之外的所有数字的正则表达式?

时间:2014-08-28 16:16:45

标签: java regex regex-negation bean-io

只有数字组成的字符串输入,即整数。如何编写一个接受除数字1,2和25之外的所有数字的正则表达式?

我想在BeanIO的record identification(支持正则表达式)中使用它来跳过一些具有特定值的记录。

我达到了这一点^(1|2|25)$,但我想要与此相符的相反。

4 个答案:

答案 0 :(得分:10)

不是说正则表达式是最好的工具,但如果你坚持......

使用否定前瞻:

/^(?!(?:1|2|25)$)\d+/

在此处查看:[{3}}

答案 1 :(得分:2)

你可以使用这样的模式:

^([03-9]\d*|1\d+|2[0-46-9]\d*|25\d+)$

或者如果您的正则表达式引擎支持它,您可以使用负面前瞻断言((?!…)),如下所示:

^(?!1$|25?$)\d+$

但是,您可能最好只是解析代码中的数字并确保它不等于禁止值之一。

答案 2 :(得分:1)

  (?!^1$|^2$|^25$)(^\d+$)

这适用于您的情况。

答案 3 :(得分:0)

See this related question on stackoverflow

您不应该尝试编写这样的正则表达式,因为大多数语言都不支持正则表达式的补充。

相反,你应该做的是写一个只匹配这三件事的正则表达式:^(1|2|25)$ - 然后在你的代码中你应该检查这个正则表达式是否匹配\d+并且不能匹配其他一,例如:

`if($myStr =~ m/\d+/ && !($myStr =~ m/^(1|2|25)$/))`