【问题标题】:Regex, Number or Empty正则表达式、数字或空
【发布时间】:2013-09-23 10:35:48
【问题描述】:

谁能告诉我如何在正则表达式中匹配 4 位数字?我一直在使用 RegexBuddy,到目前为止我已经想出了这个,但是帮助文本说“或者匹配下面的正则表达式 2 - 如果这个匹配失败,整个匹配尝试失败”到管道之后的模式。

我希望两者中的任何一个提供肯定匹配。

^\d{4}|$

【问题讨论】:

  • 上面的正则表达式是正确的。当然 ^ 表示行首, $ 表示行尾,我不确定在您的场景中是否需要。但\d{4}| 确实意味着“4 位数或没有”。
  • 实际匹配是否以 4 位数字开头或什么都没有。所以 1234a 会匹配

标签: regex


【解决方案1】:

4 位数字或无:

^(?:\d{4}|)$

这与您尝试做的最接近。

我会选择以下稍微短一点的:

^(?:\d{4})?$

^\d{4}|$

那个正则表达式意味着:

^\d{4}$

第一个将匹配任何以 4 位数字开头的字符串,而第二个将报告对 everything 的匹配(它匹配字符串的结尾,并且由于没有指定字符,它将匹配所有字符串的结尾)。

当您使用组时,您将获得:

^(?:\d{4})$^(?:)$(请注意 OR 运算符的“限制”已更改),然后等效于 ^\d{4}$^$

【讨论】:

  • 可能值得解释一下 ^\d{4}|$ 将匹配 1234a 因为 $ 不包含在第一个匹配项中
  • @BobVale 我还可以补充一点,^\d{4}|$ 作为一个整体将匹配任何东西,因为$ :)
【解决方案2】:

我认为你的方法是合理的。不过,您确实需要牢记运算符的优先级并使用任一

^(\d{4}|)$

^\d{4}$|^$

【讨论】:

    【解决方案3】:

    我不认为它是否需要

    ^(\d{4})?$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 2017-08-01
      相关资源
      最近更新 更多