有什么方法可以用捕获组的已修改内容替换正则表达式?
例:
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 :(
if (regexMatcher.find()) { resultString = regexMatcher.replaceAll( String.valueOf(3 * Integer.parseInt(regexMatcher.group(1)))); }
要获得第一场比赛,请使用#find()。之后,你可以#group(1)用来引用此第一个匹配项,并将所有匹配项替换为第一个匹配值乘以3。
#find()
#group(1)
如果你想将每个匹配项替换为该匹配项的值乘以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());