带量词的Java正则表达式:用动态生成的字符串替换匹配项
我想用动态字符数替换字符串中的所有匹配项;让我们使用[\d]+
作为一个简单的正则表达式示例:
预期结果:
1984
->DDDD
1
->D
123456789
->DDDDDDDDD
a 123 b ->
a DDD b`
替换正则表达式匹配项的常用Java方法如下所示:
Pattern p = Pattern.compile("[\d]+");
String input = [...];
String replacement = ???;
String result = p.matcher(input).replaceAll(replacement);
我的问题是:我是否必须提取各个匹配项,测量它们的长度,然后根据它们生成替换字符串?或者Java是否提供了更直接的方法
更新:事实上,我给出了相当简单的例子,使问题复杂化了。考虑到更多的上下文,这里还有一些需要注意的问题:
<1984/>
(Regex:<[\d]+/>
)->DDDDDDD
123.
->DDDD
,而:123
->123
(即不匹配)
注意:我不是想parse HTML with a regex
# 1 楼答案
你真的想得太多了。只需使用
\d
替换为D
{a1}。不需要获取字符串的长度或进行任何额外的处理;就一杯replaceAll()
See code in use here