迭代Matcher Regex Java

时间:2016-11-09 16:47:08

标签: java regex match

我想给出一个输入String,迭代这个包含模式的String的每个子串,然后将这些子串应用于另一个模式,并以某种方式替换该部分。 这是代码:

public static String parseLinkCell1NoLost(String cell) {

    String link = cell;
    Pattern catPattern = Pattern.compile("\\{\\{(.*?)\\}\\}", Pattern.MULTILINE);
    Matcher matcher = catPattern.matcher(cell);
    while (matcher.find()) {
        Pattern newP = Pattern.compile("\\{\\{nowrap|(.*?)\\}\\}", Pattern.MULTILINE);
        Matcher m = newP.matcher(cell);

        if (m.matches()) {
            String rest = m.group(0);
            String prov = m.group(1);
            String[] temp = prov.split("\\|");
            if (temp == null || temp.length == 0) {
                return link;
            } else {
                link = link.replace(rest, temp[1]);
            }
        }

    }
    return link;
}

问题是我无法获得匹配每个matcher.find()的子字符串。所以,如果我喜欢输入"{{nowrap|x}} {{nowrap|y}}",我想迭代两次并在第一个中获得子串{{nowrap|x}},在第二个中获得{{nowrap|y}}。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

public static String parseLinkCell1NoLost(String cell) {
    String link = cell;
    Pattern catPattern = Pattern.compile("\\{\\{(.*?)\\}\\}", Pattern.MULTILINE);
    Matcher matcher = catPattern.matcher(cell);
    while (matcher.find()) {
        Pattern newP = Pattern.compile("\\{\\{nowrap\\|(.*?)\\}\\}", Pattern.MULTILINE);
        Matcher m = newP.matcher(matcher.group(0));

        if (m.matches()) {
            String rest = m.group(0);
            String prov = m.group(1);
            link = link.replace(rest, prov);
        }
    }
    return link;
}

两个小错误:

  • 在循环中你应该使用matcher.group(0)仅在每次迭代中使用你的匹配而不是整个单元格
  • 您需要转义正则表达式中的|符号
  • 一旦纠正,replace(..)也可以简化