gpt4 book ai didi

regex - 使用正则表达式校验数字,只有最后一个元素可以出现 2 次

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

我试图用正则表达式检查一个数字,其中只有最后一位数字可以出现两次。
使用 javascript 作为编程语言,在 https://regex101.com/ 上尝试了多种组合,但我只能定义唯一的字符,例如

(?:([1-9])(?!.*\1)){8}
但我在最后一位数字上遇到了麻烦。
字符集:[1-9]
重要:0 不在字符集中,因此 "\d"不能工作,只有 [1-9]。
例子:
123456782 -> true, last digit (2) occur twice (EXACTLY), no other repeated digits
189765432 -> false, last digit not repeated previously, only unique digits in it
123456889 -> false, not the last digit repeated
123476782 -> false, not only the last digit repeated
123426282 -> false, last digit repeated more than twice.
欢迎任何帮助。如何为其应用正则表达式?

最佳答案

您可以使用

^(?=[1-9]+([1-9])$)(?!.*(?!\1)(\d).*\2)(?:(?!\1)\d)*\1(?:(?!\1)\d)*\1$
稍微缩短:
^(?=[1-9]+([1-9])$)(?!.*(?!\1)(\d).*\2)(?:(?:(?!\1)\d)*\1){2}$
请参阅 regex demo #1regex demo #2
请注意,您可以在非初始前瞻中使用 \d,因为初始前瞻验证字符串格式,即只能再有两个非零数字。
详细信息
  • ^ - 字符串的开头
  • (?=[1-9]+([1-9])$) - 从字符串的开头开始,应该有一个或多个非零数字,然后在捕获到组 1 中的字符串末尾跟随一个非零数字。我们将能够使用\1 反向引用
  • (?!.*(?!\1)(\d).*\2) - 在当前位置的右侧,不能有不等于捕获到重复的组 1 中的数字
  • (?: - 非捕获组的开始:
  • (?:(?!\1)\d)* - 任何数字,零次或多次出现,尽可能多,这不是被捕获到组 1 中的那个
  • \1 - 捕获的数字

  • ){2} - 非捕获组结束,重复 2 次
  • $ - 字符串结束。
  • 关于regex - 使用正则表达式校验数字,只有最后一个元素可以出现 2 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65111140/

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