【问题标题】:java regex to match duplicate numbers and not 0 ,1java正则表达式匹配重复数字而不是 0 ,1
【发布时间】:2019-05-06 06:56:21
【问题描述】:

我需要编写匹配以 012 开头的 11 个数字和 012 之后的两个数字不应该是 0,1 并且应该重复的模式。 例如:01244521478 为真或 01266235698 为真,01200256354 为假。我尝试了这种模式:"012(.)\\1{1}([\\d]{6}$)" 但我不知道在哪里说 012 之后不允许 0,1 。 请帮帮我

【问题讨论】:

    标签: java regex match digits


    【解决方案1】:

    您的正则表达式 012(.)\1{1}([\d]{6}$) 很好,但无法满足您的第 4 位和第 5 位数字不应为 0 或 1 且应重复要求。也不需要{1},因为它默认是隐式的。仅在花括号内的值大于一个或类似 {2}{1,5} 的范围时使用它

    这个正则表达式应该可以满足你的需求,

    ^(?=\d{11}$)012([^01])\1\d{6}$
    

    说明:

    • ^ --> 字符串开始
    • (?=\d{11}$) --> 积极向前看,以确保它只包含数字并且正好是 11 位数字。为什么需要这样做,因为[^01] 否定 0 和 1,但不允许任何其他字符。
    • 012 --> 匹配 012 字面意思
    • ([^01])\1 --> 接下来的两位数字将重复,可以是除 0 和 1 以外的任何数字
    • \d{6} --> 匹配任意六位数字
    • $ --> 输入结束

    Demo

    【讨论】:

      【解决方案2】:

      在您的正则表达式中,您使用(.)\\1,它将捕获组中的任何字符并使用反向引用引用该捕获,例如也将匹配012$$521478

      您可以做的是更改 (.)\\1) 以匹配从 2 到 9 的数字,例如 ([2-9])\\1。如果您没有在工具或代码中提及第二个捕获组,则可以省略第二个捕获组。 {1}可以省略,[\\d]可以写成\\d

      更新后的正则表达式可能如下所示:

      ^012([2-9])\1\d{6}$

      在 Java 中:

      String regex = "^012([2-9])\\1\\d{6}$";
      

      Regex demo | Java demo

      说明

      • ^断言字符串的开始
      • 012 匹配字面意思
      • ([2-9])在组中捕获一个数字2-9
      • \1 反向引用第一个捕获组
      • \d{6} 匹配 6 位数字
      • $断言字符串结束

      【讨论】:

        猜你喜欢
        • 2016-09-11
        • 1970-01-01
        • 1970-01-01
        • 2015-11-14
        • 1970-01-01
        • 1970-01-01
        • 2022-10-12
        • 2018-07-09
        • 1970-01-01
        相关资源
        最近更新 更多