GWT中的RegExp和MatchResult仅返回第一个匹配项

时间:2017-04-07 12:11:44

标签: java regex string gwt

我正在尝试在GWT中使用RegExp和MatchResult。它仅返回单词中的第一个匹配项。我需要拥有所有三个“g”,“i”,“m”。我尝试了“gim”,它是全局的,多行的,不区分大小写的。但它没有用。请在下面找到代码。提前谢谢。

预期输出为,无论情况如何,都应在“On Condition”中找到3个“on”匹配。

import com.google.gwt.regexp.shared.MatchResult;
import com.google.gwt.regexp.shared.RegExp;

public class PatternMatchingInGxt {

public static final String dtoValue = "On Condition";
public static final String searchTerm = "on";

public static void main(String args[]){
    String newDtoData = null;
    RegExp regExp = RegExp.compile(searchTerm, "mgi");
    if(dtoValue != null){
        MatchResult matcher = regExp.exec(dtoValue);
        boolean matchFound = matcher != null;
        if (matchFound) {
            for (int i = 0; i < matcher.getGroupCount(); i++) {
                String groupStr = matcher.getGroup(i);
                newDtoData = matcher.getInput().replaceAll(groupStr, ""+i);
                System.out.println(newDtoData);
            }
        }
    }
  }
}

1 个答案:

答案 0 :(得分:3)

如果您需要收集所有匹配项,请运行exec,直至找不到匹配项。

要替换多次出现的搜索字词,请使用带有捕获组的模式RegExp#replace()(我无法对所有匹配工作进行$&反向引用GWT)。

按如下方式更改代码:

if(dtoValue != null){

    // Display all matches
    RegExp regExp = RegExp.compile(searchTerm, "gi");
    MatchResult matcher = regExp.exec(dtoValue);
    while (matcher != null) { 
        System.out.println(matcher.getGroup(0));  // print Match value (demo)
        matcher = regExp.exec(dtoValue); 
    }

    // Wrap all searchTerm occurrences with 1 and 0
    RegExp regExp1 = RegExp.compile("(" + searchTerm + ")", "gi");
    newDtoData = regExp1.replace(dtoValue, "1$10");
    System.out.println(newDtoData);
    // => 1On0 C1on0diti1on0
}

请注意,m(多线修改器)仅影响模式中的^$,因此,您不需要此处。