2016-04-26 60 views
0

我有下面的代码。模式匹配器没有给出预期的输出

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 

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

+2

如果你删除'i ++'并使用'group(0)'? – npinti

+0

@npinti:它工作。谢谢。 :) – manutd

+0

如果还有一个变量,就会出现错误。 – rock321987

回答

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