我有一个像这样的字符串:“ @@ 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 > ##

最佳答案

尝试使用“惰性”运算符

startChars+"VV .*?"+sepChars+".*?"+endChars


通知.*?

这是工作示例。 https://www.regextester.com/?fam=108741

10-01 19:37