我有一个这样的字符串“ @@ VV 1 ?? 28> ## @@ VV 3 78 ??> ## @@ VV ?? 5 27> ##” 想要使用正则表达式提取由该模式“ @@ VV。>。 ##” 标识的三个组。 但是,如果我使用以前的模式语法编译测试字符串,则会将整个测试字符串作为一个组而不是三个组提取。 如何定义正则表达式字符串并获得三组?
public static void main(String[] args) {
String INPUT = "@@VV 1 ?? 28 > ##@@VV 3 78 ?? > ##@@VV ?? 5 27 > ##";
String startChars = "@@";
String sepChars = ">";
String endChars = "##";
String REGEX = startChars+"VV .*"+sepChars+".*"+endChars;
Pattern pattern = Pattern.compile(REGEX, Pattern.MULTILINE | Pattern.DOTALL);
// get a matcher object
Matcher matcher = pattern.matcher(INPUT);
//Prints the number of capturing groups in this matcher's pattern.
System.out.println("Group Count: "+matcher.groupCount());
while(matcher.find()) {
System.out.println(matcher.group());
}
}
Expected results:
Group Count: 3
@@VV 1 ?? 28 > ##
@@VV 3 78 ?? > ##
@@VV ?? 5 27 > ##
Actual results:
Group Count: 0
@@VV 1 ?? 28 > ##@@VV 3 78 ?? > ##@@VV ?? 5 27 > ##
答案 0 :(得分:2)
尝试使用“惰性”运算符
startChars+"VV .*?"+sepChars+".*?"+endChars
通知.*?
答案 1 :(得分:0)
您缺少捕获组:用括号括起来。
正则表达式:(@@VV.*?> ##)