我想通过对检测到的组调用函数来替换字符串中的某些模式。

更具体地说,我想例如进行转换

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/

10-09 02:11