我们怎样才能替代呢?下面举个例子来解释一下:
<h1>test test</h1>
<h2>sometext</h2>
我想将其替换为:
<h1 id="test-test">test test</h1>
<h2 id="sometext">sometext</h2>
请注意 id="test-test"
有一个破折号,它是由空格字符和 <h1>test test</h1>
替换的,这就是为什么这个问题被命名为“替换替换”
我知道使用多个正则表达式如 <(h[1-6])>(.*)<\\/\\1>
然后找到h1 id="..."
替换就可以了,但我想在单个正则表达式中完成此操作。可能吗?
最佳答案
Pattern.compile("<h1>(.*?)</h1>").matcher(s).replaceAll(mr ->
"<h1 id=" + mr.group(1).replace(' ', '-') + "> " + ...);
或者
Pattern.compile("<h1>(.*?)</h1>").matcher(s).replaceAll(mr -> {
return "<h1 id=" + mr.group(1).replace(' ', '-') + "> " + ...;
});
- 也就是说,使用 replaceAll 的 lambda 版本(从 java 9 开始)。
- 替换最短序列
.*?
所以...<h1>...</h1>...<h1>...</h1>...
一切顺利。 -
mr
是MatchResult
.
关于java - 替换替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771519/