java - 替换替换

标签 java regex

我们怎样才能替代呢?下面举个例子来解释一下:

<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>...一切顺利。
  • mrMatchResult .

关于java - 替换替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771519/

相关文章:

php - 正则表达式可连续查找php中3个字母实例

java - 无法从 Facebook 获取用户的个人资料图片。请查看详情

asp.net - 正则表达式匹配该月的前 28 天

java - 如何获得 Java 程序的免费、简单的多平台安装程序

java - 如何循环遍历数组列表以查看是否有任何对象具有相同的值

java - 字符串正则表达式无法分割闭括号中的单词

regex - 如何查看 RegexOptions 枚举中可用的选项?

java - Regexp::Assemble 的 Java 等价物是什么?

java - 在 Google App Engine 中调整静态图像文件的大小

Java .charAt(i) 比较问题