我想要找到的Java中的正则表达式
 -仅前6位数字相同

 -最后一位数字范围从0-9连续。

1303250
1303251

1304150
1304151
1304152
1304153
1304154
1304155
1304156
1304157
1304158
1304159

在这种情况下,表达式将匹配130415X。

我开发了两个单独的正则表达式

        Pattern f6 = Pattern.compile("^......");
        Pattern last = Pattern.compile("\\d$");

最佳答案

因此,我们编写一个正则表达式将前6位数字分组(后跟0),然后检查该组,然后是最多9的计数。我们在字符串中找到匹配项,然后如果匹配则打印出第一个分组被发现。

这是代码:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class HelloWorld{

 public static void main(String []args){
    String test = "1304150 1304151 1304152 1304153 1304154 1304155 1304156 1304157 1304158 1304159\r\n" +
                  "5304150 5304151 5304152 5304153 5304154 5304155 5304156 5304157 5304158 5304159\r\n" +
                  "7304150 7304153 71304156";

    Pattern p = Pattern.compile("(\\d{6})0 (?:\\1)1 (?:\\1)2 (?:\\1)3 (?:\\1)4 (?:\\1)5 (?:\\1)6 (?:\\1)7 (?:\\1)8 (?:\\1)9", Pattern.MULTILINE);
    Matcher m = p.matcher(test);

    while (m.find()) {
        System.out.println(new String(m.group(1)) + "X");
    }
 }


}

输出:

130415X
530415X


如果找到匹配项,则会打印出相关的6位数字和“ X”。 See it in action here

Regex explanation。本质上,它将第一个6位数字的匹配分组,后跟一个0。然后,它寻找该组,然后是1,然后是组,然后是2,依此类推。整个字符串中的双'\'只是为了转义Java字符串中的字符,并且应读取正则表达式时不要使用双斜杠:

(\d{6})0 (?:\1)1 (?:\1)2 (?:\1)3 (?:\1)4 (?:\1)5 (?:\1)6 (?:\1)7 (?:\1)8 (?:\1)9

   NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (                        group and capture to \1:
    \d{6}                    digits (0-9) (6 times)
  )                        end of \1
  0                        '0 '
  (?:                      group, but do not capture:
    \1                       what was matched by capture \1
  )                        end of grouping
  1                        '1 '
  (?:                      group, but do not capture:
    \1                       what was matched by capture \1
  )                        end of grouping
  2                        '2 '
  (?:                      group, but do not capture:
    \1                       what was matched by capture \1
  )                        end of grouping
  3                        '3 '
  (?:                      group, but do not capture:
    \1                       what was matched by capture \1
  )                        end of grouping
  4                        '4 '
  (?:                      group, but do not capture:
    \1                       what was matched by capture \1
  )                        end of grouping
  5                        '5 '
  (?:                      group, but do not capture:
    \1                       what was matched by capture \1
  )                        end of grouping
  6                        '6 '
  (?:                      group, but do not capture:
    \1                       what was matched by capture \1
  )                        end of grouping
  7                        '7 '
  (?:                      group, but do not capture:
    \1                       what was matched by capture \1
  )                        end of grouping
  8                        '8 '
  (?:                      group, but do not capture:
    \1                       what was matched by capture \1
  )                        end of grouping
  9                        '9'


根据注释中的要求,可以使用相反的方法:

^(?!((\d{6})0 (?:\2)1 (?:\2)2 (?:\2)3 (?:\2)4 (?:\2)5 (?:\2)6 (?:\2)7 (?:\2)8 (?:\2)9)).*$

不出所料,逆向匹配要复杂一些,但是here's the explanation并且您也可以see it in action

关于java - Java正则表达式从0-9连续查找最后一位数字,并且前6位数字相同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30181345/

10-11 03:48