模式匹配器没有给出预期的输出

时间:2016-04-26 06:42:06

标签: java regex

我有以下代码。

String testdata = "%%%variable1%%% is not equal to %%%variable2%%%";
Pattern p = Pattern.compile("\\%%%(.*?)\\%%%");
Matcher m = p.matcher(testdata);
String variables = "";
int i = 0;
while (m.find()) {
    System.out.println(m.group());
    variables=m.group().replaceAll("%%%", "");
    System.out.println(variables);
    i++;
}

我正在尝试在两个%%%内打印字符串。 所以我期待低于输出:

%%%variable1%%% 
variable1 
%%%variable2%%% 
variable2

但实际输出是:

%%%variable1%%%
variable1
variable2
variable2

为什么会这样?这有什么问题?

1 个答案:

答案 0 :(得分:4)

您需要删除i。没有必要

while (m.find()) {
      System.out.println(m.group());
      String variables=m.group().replaceAll("%%%", "");
      System.out.println(variables);
}

<强> Ideone Demo

您不需要replaceAll,因为您需要的内容已经在第一个捕获组

while (m.find()) {
     System.out.println(m.group());
     System.out.println(m.group(1));
}

<强> Ideone Demo