11

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

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

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

4

4 回答 4

19

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

使用负前瞻:

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

在此处查看实际操作:http ://regexr.com/39df2

于 2014-08-28T16:19:20.760 回答
3

你可以使用这样的模式:

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

或者,如果您的正则表达式引擎支持它,您可以像这样使用否定的前瞻断言( (?!…)):

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

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

于 2014-08-28T16:20:12.507 回答
1
  (?!^1$|^2$|^25$)(^\d+$)

这应该适用于您的情况。

于 2014-08-28T16:38:40.973 回答
0

请参阅有关 stackoverflow 的相关问题

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

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

`if($myStr =~ m/\d+/ && !($myStr =~ m/^(1|2|25)$/))`
于 2014-08-28T16:20:55.827 回答