正则表达式多个匹配项串联在一起

时间:2019-04-03 16:02:14

标签: java

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

2 个答案:

答案 0 :(得分:2)

尝试使用“惰性”运算符

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

通知.*?

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

答案 1 :(得分:0)

您缺少捕获组:用括号括起来。

正则表达式:(@@VV.*?> ##)