【问题标题】:Regex quantifier with capturing group issue [closed]具有捕获组问题的正则表达式量词[关闭]
【发布时间】:2017-07-22 12:34:50
【问题描述】:

怎么了?

我正在尝试让一些正则表达式起作用,但我正面临一些“奇怪”(?)行为。

我需要一个验证以下内容的正则表达式:

  • 只有数字(根本没有空格)
  • 以 10 或 11 开头
  • 必须为 12 个字符

在这方面工作了一段时间后,我陷入了困境:

^(10|11)[0-9]{10}$

它似乎按预期工作,但我并不满意,因为乍一看它会产生误导。最多必须是 12 个字符,但它会验证最多 10 个 + 'starts with' 字符。

任何人有更好的解决方案或关心解释为什么会发生这种情况?

提前致谢(:

【问题讨论】:

  • 我不明白如果它按要求工作有什么问题......你不喜欢正则表达式字符串的样子......?
  • 不是我不喜欢它,而是有一个 10 个字符长的验证,它实际上验证了 12 个,在对代码进行维护时会产生误导。
  • 如果您有眼睛问题,请使用^(?=(10|11))[0-9]{12}$
  • 我投票结束这个问题,因为这是一个关于代码美学外观的问题。

标签: java regex quantifiers capturing-group


【解决方案1】:

它没有按预期工作。
{10} 在您的情况下正好是 10 位数字。
您可以使用{0,10} 其中Matches between 0 and 10 times, as many times as possible, giving back as needed

至于误导部分 - 它是主观的,如果数字必须以 10 或 11 开头,那么它必须是 2 位数字,并且您可以允许不超过另外 10 位数字

【讨论】:

  • 感谢您的回复!对不起,最大字符的错误,那是我的错:P 实际上它应该是“必须是 12 个字符长”所以,量词的这种行为是正常的吗?
  • 是的,我相信您想看到类似“以 10 或 11 开头,长度为 12 位”的内容,而在正则表达式中看不到“12”会让您感到不舒服,如果您可以使用的话@sln 提议的那个
【解决方案2】:

我认为您需要的是以下内容:

^(10|11)[0-9]{0,10}$

这意味着它以 10 或 11 开头,长度可以在 2 到 12 个字符之间

Try it here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多