【问题标题】:What's a regex that matches all numbers except 1, 2 and 25?什么是匹配除 1、2 和 25 之外的所有数字的正则表达式?
【发布时间】:2014-10-22 14:11:45
【问题描述】:

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

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

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

【问题讨论】:

  • 首先您使用的是什么语言?第二个如何分享你到目前为止所尝试的?
  • 您为什么如此热衷于为此使用正则表达式?听起来您应该只做atoi() 或类似的操作并比较实际数字,甚至直接比较字符串。
  • 实际上正则表达式不会匹配 numbers 它只匹配字符。一个七位数的字符串仍然只是一个 int。
  • 您的脚本/语言是否支持负面结构? if ( matched ) then fail

标签: java regex regex-negation bean-io


【解决方案1】:

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

使用负前瞻:

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

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

【讨论】:

    【解决方案2】:

    你可以使用这样的模式:

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

    或者,如果您的正则表达式引擎支持它,您可以像这样使用negative lookahead assertion ((?!…)):

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

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

    【讨论】:

      【解决方案3】:
        (?!^1$|^2$|^25$)(^\d+$)
      

      这应该适用于您的情况。

      【讨论】:

        【解决方案4】:

        See this related question on stackoverflow.

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

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

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

        【讨论】:

          猜你喜欢
          • 2023-03-08
          • 2014-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-15
          • 1970-01-01
          • 2019-02-15
          • 1970-01-01
          相关资源
          最近更新 更多