我想通过对检测到的组调用函数来替换字符串中的某些模式。
更具体地说,我想例如进行转换
String input = "normal <upper> normal <upper again> normal";
进入
String output = "normal UPPER normal UPPER AGAIN normal";
正则表达式
\<(.*?)\>"
应该检测到我想要转换的模式,但是使用output = input.replaceAll("\\<(.*?)\\>", "$1".toUpperCase());
不起作用,因为在逻辑上将
$1
放在大写形式,也就是说,在方法内部将其处理之前,什么都没有发生。此外,我要应用的方法是使用替换字符串作为参数来调用的;因此,“错误的天真方式”将更像
output = input.replaceAll("\\<(.*?)\\>", transform("$1"));
您知道执行此操作的任何技巧吗?
最佳答案
惯用的方法有点冗长:
Matcher m = Pattern.compile("\\<(.*?)\\>").matcher(input);
StringBuffer b = new StringBuffer();
while (m.find()) {
m.appendReplacement(b, transform(m.group());
}
m.appendTail(b);
output = b.toString();
关于java - 与Java中的正则表达式匹配时,将函数应用于替换字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5145864/