我想要找到的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/