Java正则表达式一个组中的字符数决定下一个组中的字符数
这是给你的。是否可以根据前一组中已匹配的字符数,有条件地匹配一组中的字符数 我需要匹配这样的东西Java正则表达式一个组中的字符数决定下一个组中的字符数,java,regex,conditional-statements,Java,Regex,Conditional Statements,这是给你的。是否可以根据前一组中已匹配的字符数,有条件地匹配一组中的字符数 我需要匹配这样的东西 ABCDEFG | .ABCDEF | ..ABCDE | ...ABCD | ....ABC | .....AB 我知道这可以通过多个或多个语句分别捕获每个组来实现,如下所示: [A-Z0-9]{7}|\.[A-Z0-9]{6}|\.{2}[A-Z0-9]{5} you get the idea 但这可以通过条件匹配来实现吗?(是的,我知道我只列出了字符;这是为了清楚起见,但我还
ABCDEFG | .ABCDEF | ..ABCDE | ...ABCD | ....ABC | .....AB
我知道这可以通过多个或多个语句分别捕获每个组来实现,如下所示:
[A-Z0-9]{7}|\.[A-Z0-9]{6}|\.{2}[A-Z0-9]{5} you get the idea
但这可以通过条件匹配来实现吗?(是的,我知道我只列出了字符;这是为了清楚起见,但我还需要匹配数字,因此需要正则表达式)。我也试过这个,但不太管用
(\.*[A-Z0-9]*){7}
如果要使用单个捕获组,或许可以使用
\G
锚来断言上一次匹配结束时的位置:
(?:\.*([A-Z0-9]+)|\G(?!\A))(?:\h+\|\h+|$)
|
例如,如果您只想获取捕获组的值:
String regex = "(?:\\.*([A-Z0-9]+)|\\G(?!\\A))(?:\\h+\\|\\h+|$)";
String string = "ABCDEFG | .ABCDEF | ..ABCDE | ...ABCD | ....ABC | .....AB";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
if (matcher.group(1) != null) {
System.out.println(matcher.group(1));
}
}
结果:
ABCDEFG
ABCDEF
ABCDE
ABCD
ABC
AB
在这种特殊情况下,可以是
((?![A-Z0-9]\)[.A-Z0-9]){7}
,以匹配[.A-Z0-9]中的7个字符序列,其中一个字符后面从不跟点