代码之家  ›  专栏  ›  技术社区  ›  dale landry

用于将数字与两个和三个数字模式一起匹配的正则表达式

  •  0
  • dale landry  · 技术社区  · 4 年前

    我有一个5个数字的数组,只要有,我就要匹配 三 的 相同号码 和 的 不同的 数字 例如: 33322 24422 52225 44111 54545 *基本上,相同数字的2和3的任何分组都需要匹配。

    ^([0-9])\1{2}|([0-9])\1{1}$

    我对regex不太在行,任何帮助都将不胜感激。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Wiktor Stribiżew    4 年前

    你可以用

    ^(?=[1-5]{5}$)(?=.*(\d)(?:.*\1){2})(?=.*(?!\1)(\d).*\2)\d+$
    ^(?=.*(\d)(?:.*\1){2})(?=.*(?!\1)(\d).*\2)[1-5]{5}$
    

    见 regex demo .

    [1-5] 具有 \d .

    细节

    • ^ -字符串开头
    • (?=[1-5]{5}$) -必须有五个数字 1 到 5 直到字符串结束(这种前瞻性使不匹配的字符串更快地失败)
    • (?=.*(\d)(?:.*\1){2}) -一种正向前瞻,需要尽可能多的零个或多个字符,后跟一个数字(捕获到组1中),然后是两个尽可能多的零个或多个字符序列,以及立即在当前位置右侧捕获到组1中的同一个数字
    • (?=.*(?!\1)(\d).*\2) -一种正向前瞻,需要尽可能多的零个或多个字符,后跟一个不等于组1中的数字的数字(捕获到组2中),然后在当前位置右侧立即添加尽可能多的零个或多个字符以及捕获到组2中的同一数字
    • \d+ -一个或多个数字
    • $ -结束字符串。