代码之家  ›  专栏  ›  技术社区  ›  e2rabi

如何使用regex验证此模式

  •  1
  • e2rabi  · 技术社区  · 8 年前

    我试图编写一个正则表达式来验证模式,但我有一些问题。 这是我应该使用正则表达式获取和验证的模式

    XXXX
    XXXX-XXXX
    XXXX-XXXX-XXXX-XXXX-XXXX
    

    每个X是一个整数[0-9]

    我正在尝试:

    [0-9]{4}(-?[0-9]{4})?
    

    但它给了我这种模式:

    **4586-4584**-**5588-5558**-**5888-5545**
    

    enter image description here

    知道如何解决这个问题吗?提前感谢!

    5 回复  |  直到 8 年前
        1
  •  1
  •   The fourth bird    8 年前

    你的模式 [0-9]{4}(-?[0-9]{4})? 使用可选连字符 -? 和可选组 (-?[0-9]{4}) .

    可选连字符 -? 例如,一行允许8位数字(4位数字后接4位数字)。

    可选组只允许0或1次发生,因此XXXX-XXXX-XXXX不匹配。

    不在测线的起点和终点使用锚点将匹配 3333-3333 在里面 333-3333-3333 .

    您可以将regex更新为 ^[0-9]{4}(-[0-9]{4})*$ ,或具有 \d : ^\d{4}(?:-\d{4})*$

    解释

    • 从字符串的开头 ^
    • 4位数字 \d{4}
    • 匹配连字符和4位数字的非捕获组 (?:-\d{4})
    • 重复该组0次或更多次 *
    • 字符串的结尾 $
        2
  •  1
  •   Shen Yudong    8 年前
    [0-9]{4}(-[0-9]{4})*
    

    试试这个,你需要 - ,无法添加 ? 在它前面。添加 * 而不是 ? ,因为可能有多个

    (?<![0-9\-])[0-9]{4}(-[0-9]{4})*(?![0-9\-])
    

    这个与1234-5667-78961234不匹配

        3
  •  1
  •   GalAbra    8 年前
    ^(\d{4})(-(\d{4})){0,5}$
    

    如果我理解正确,你在寻找 XXXX (因此 X 是一个数字),显示1到6次,中间有连字符。

    因此,前4位数字为 强制性的 ,然后可能出现1到5次 -XXXX .

    请注意 ^ 以及 $ ,以确保正则表达式不只是匹配字符串的一部分。

        4
  •  0
  •   user2342558    8 年前

    尝试以下模式:

        (\b([0-9]){4}\b)|(\b([0-9]){4}\-([0-9]){4}\b)|(\b([0-9]){4}\-([0-9]){4}\-([0-9]){4}\b)|(\b([0-9]){4}\-([0-9]){4}\-([0-9]){4}\-([0-9]){4}\b)
    

    Demo

        5
  •  -2
  •   L3R04    8 年前

    这应该可以做到。但仅使用C#进行了尝试。

    [0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}