一尘不染

Java正则表达式替换为捕获组

java

有什么方法可以用捕获组的已修改内容替换正则表达式?

例:

Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher(text);
resultString = regexMatcher.replaceAll("$1"); // *3 ??

我想用$ 1乘以3代替所有出现的情况。

编辑:

看起来好像出了点问题:(

如果我用

Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher("12 54 1 65");
try {
    String resultString = regexMatcher.replaceAll(regexMatcher.group(1));
} catch (Exception e) {
    e.printStackTrace();
}

引发IllegalStateException:找不到匹配项

Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher("12 54 1 65");
try {
    String resultString = regexMatcher.replaceAll("$1");
} catch (Exception e) {
    e.printStackTrace();
}

工作正常,但我不能更改$ 1 :(


阅读 792

收藏
2020-03-24

共1个答案

一尘不染

if (regexMatcher.find()) {
    resultString = regexMatcher.replaceAll(
            String.valueOf(3 * Integer.parseInt(regexMatcher.group(1))));
}

要获得第一场比赛,请使用#find()。之后,你可以#group(1)用来引用此第一个匹配项,并将所有匹配项替换为第一个匹配值乘以3。

如果你想将每个匹配项替换为该匹配项的值乘以3:

    Pattern p = Pattern.compile("(\\d{1,2})");
    Matcher m = p.matcher("12 54 1 65");
    StringBuffer s = new StringBuffer();
    while (m.find())
        m.appendReplacement(s, String.valueOf(3 * Integer.parseInt(m.group(1))));
    System.out.println(s.toString());
2020-03-24