gpt4 book ai didi

任何数字中的两个正则表达式,然后是另一个数字中的三个,然后是另一个数字中的四个?

转载 作者:行者123 更新时间:2023-12-01 23:29:04 25 4
gpt4 key购买 nike

正则表达式很棒,但我无法在不详细说明整个排列的情况下如何表达以下约束:

2 of any digit [0-9]
3 of any other digit [0-9] excluding the above
4 of any third digit [0-9] excluding the above

我有这个怪物,这显然不是一个好的方法,因为它随着每增加一组数字呈指数增长:

^(001112222|001113333|001114444|001115555|001116666|0001117777|0001118888|0001119999|0002220000|...)$

OR

^(0{2}1{3}2{4}|0{2}1{3}3{4}|0{2}1{3}4{4}|0{2}1{3}5{4}|0{2}1{3}6{4}|0{2}1{3}7{4}|0{2}1{3}8{4}|...)$

最佳答案

看起来下面的方法会起作用:

^((\d)\2(?!.+\2)){2}\2(\d)\3{3}$

它可能看起来有点棘手,使用递归模式,但它看起来可能比实际情况更令人生畏。看在线demo .

  • ^ - 开始字符串 anchor 。
  • ( - 打开第一个捕获组:
    • (\d) - 第二个捕获组确实捕获 0-9 范围内的单个数字。
    • \2 - 对第二组中捕获的内容的反向引用。
    • (?!.+\2) - 否定前瞻以防止 1+ 个字符后跟对第二组匹配项的反向引用。
    • ){2} - 关闭第一个捕获组并匹配两次。
  • \2 - 对第二个捕获组中最近捕获的内容的反向引用。
  • (\d) - 第三个捕获组包含一个数字。
  • \3{3} - 对第 3 个捕获组的匹配项的恰好三个反向引用。
  • $ - 结束字符串 anchor 。

编辑:

看看您的交替,只要每个序列中的数字与之前的数字序列不同,您似乎也允许像“002220000”这样的数字。如果是这种情况,您可以将上面的内容简化为:

^((\d)\2(?!.\2)){2}\2(\d)\3{3}$

主要区别在于“+”修饰符已从模式中删除,以允许在以后使用相同的数字。

参见 demo

关于任何数字中的两个正则表达式,然后是另一个数字中的三个,然后是另一个数字中的四个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66655307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com