【问题标题】:Regex to match non integers?正则表达式匹配非整数?
【发布时间】:2011-06-25 00:36:08
【问题描述】:

尝试创建一个忽略正确整数(15999 等)和正斜杠(/)的正则表达式,但在其他所有内容中都找到匹配项。例如,它将找到以下匹配项:

  • test
  • test1
  • test-1

但忽略

  • 1
  • 55
  • 7

这是一个模组重写。

【问题讨论】:

  • 应该允许浮点数吗?例如1.337?

标签: regex mod-rewrite


【解决方案1】:

[^-0-9\/]+ 应该可以解决问题,我认为。它将匹配任何包含非数字的字符串。

编辑添加了整数中也允许的减号,然后包括问题中提到的正斜杠。

【讨论】:

  • 它也会匹配混合字符串吗?我希望能够匹配它们可能混合了数字但忽略只是数字的字符串的字符串。
  • 是的,因为混合字符串包含非数字。
  • 谢谢。我认为做到了。不过,我确实对其进行了编辑以忽略正斜杠: [^-0-9/]+
  • 正则表达式本身不会匹配混合字符串,但 mod_rewrite 会匹配它,因为 mod_rewrite 匹配包含您提供的正则表达式的任何字符串。
  • 它不会只匹配字符串中非数字的部分,而不是整个字符串吗?我可能在这里错了。
【解决方案2】:

这是一个非常古老的问题,但我注意到当前接受的答案 ([^-0-9\/]) 不会匹配中间或末尾有破折号/减号 (-) 的数字字符串的任何部分或纯粹由破折号组成。

因此,正则表达式不会12-341234---12------ 等字符串中找到匹配项,即使这些显然不是有效的整数数字,因此应该被抓住。

要将这些包含在正则表达式中,您可以使用如下内容:

[^-0-9]+|[0-9]+(?=-)|^-$|-{2,}

这将匹配

  • 任一字符串中包含非数字、非减号字符的任何部分(与当前接受的答案中的正则表达式一样)
  • 后跟减号 - 的任何数字(使用正向前瞻,注意除开头之外的任何地方都带有破折号的数字)
  • 由一个破折号组成的任何字符串
  • 具有两个或多个连续破折号的字符串的任何部分

因此,这将在任何不是正整数或负整数的字符串中找到匹配项,另请参阅https://regex101.com/r/8zJwCy/1


如 OP 要求,还包括(或更确切地说不包括)斜杠,可以将它们添加到第一个字符组。

[^-0-9\/]+|[0-9]+(?=-)|^-$|-{2,}

请注意,这也不会匹配纯斜杠系列(//////、...)和整数之间的多个斜杠(1//21//-2//1、@ 987654340@) 可能需要也可能不需要(当前接受的答案行为相同),请参阅https://regex101.com/r/8zJwCy/3

要同时捕获这些,添加另外两个与一系列斜杠匹配的可选组,类似于处理破折号的最后两个组。或者,如果您希望单个斜杠 (/) 有效,只需添加一组类似于最后一个的组,请参阅https://regex101.com/r/8zJwCy/4

[^-0-9\/]+|[0-9]+(?=-)|^-$|-{2,}|\/{2,}

【讨论】:

    【解决方案3】:

    这将逐行匹配 - 这是您需要的吗?
    ^[0-9\/]*$

    【讨论】:

      【解决方案4】:

      这应该可以完成工作!

      ^[0-9\/]+$
      

      【讨论】:

        猜你喜欢
        • 2019-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-09
        • 2011-11-30
        • 1970-01-01
        相关资源
        最近更新 更多