有没有办法用修改后的捕获组内容替换正则表达式?
例:
Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher(text);
resultString = regexMatcher.replaceAll("$1"); // *3 ??
Run Code Online (Sandbox Code Playgroud)
而且我想用$ 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();
}
Run Code Online (Sandbox Code Playgroud)
它抛出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();
}
Run Code Online (Sandbox Code Playgroud)
工作正常,但我不能改变$ 1 :(
编辑:
现在,它的工作:)
ear*_*arl 78
怎么样:
if (regexMatcher.find()) {
resultString = regexMatcher.replaceAll(
String.valueOf(3 * Integer.parseInt(regexMatcher.group(1))));
}
Run Code Online (Sandbox Code Playgroud)
要获得第一场比赛,请使用#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());
Run Code Online (Sandbox Code Playgroud)
您可能希望查看Matcher文档,其中详细介绍了这些内容以及更多内容.
Dra*_*mon 11
伯爵的回答为您提供了解决方案,但我想我会添加导致您问题的问题IllegalStateException.你在group(1)没有先调用匹配操作(例如find())的情况下进行调用.如果您刚刚使用,则不需要这样做,$1因为replaceAll()匹配操作.
Java 9 提供了一个Matcher.replaceAll()接受替换函数的方法:
resultString = regexMatcher.replaceAll(
m -> String.valueOf(Integer.parseInt(m.group()) * 3));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100199 次 |
| 最近记录: |