gpt4 book ai didi

Java-replaceFirst-跳转到下一个匹配项

转载 作者:行者123 更新时间:2023-11-30 05:36:00 26 4
gpt4 key购买 nike

我试图转义仅在 <pre> 内的 HTML我遇到的标签(不要问我这里面有没有逻辑)

我确实写了这个简短的程序,它工作正常,但我想跳到下一场比赛,而不实际添加 id="ProcessedTag"所以它不仅仅取代第一场比赛。这是我的代码:

import java.util.regex.Pattern;
import java.util.regex.Matcher;
import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;

public class ReplaceHTML {
public static void main(String[] args) {
String html = "something something < > && \"\" <pre> text\n" +
"< >\n" +
"more text\n" +
"&\n" +
"<\n" +
"</pre>\n" +
"and some more text\n" +
"<pre> text < </pre>";

Pattern pattern = Pattern.compile("(?i)(?s)<pre>(.*?)</pre>");
Matcher matcher = pattern.matcher(html);

while(matcher.find()) {
html = html.replaceFirst("(?i)(?s)<pre>(.*?)</pre>", "<pre id=\"ProcessedTag\">" + escapeHtml4(matcher.group(1)) + "</pre>");
}
System.out.println(html);
}
}

因此,为了不只替换第一次出现的情况,我决定添加此 id="ProcessedTag" ,因此replaceFirst可以移动到下一个匹配。我想应该有一种更聪明的方法来做到这一点,而不需要添加任何额外的东西。对不起,如果这是一个愚蠢的问题或者之前已经被问过(找不到任何有用的东西)

问候。

最佳答案

您应该在此处使用 Matcher#appendReplacement:

Pattern pattern = Pattern.compile("(?i)(?s)<pre>(.*?)</pre>");
Matcher matcher = pattern.matcher(html);
StringBuffer buffer = new StringBuffer("");
while (matcher.find()) {
matcher.appendReplacement(buffer, "<pre>" + escapeHtml4(matcher.group(1)) + "</pre>");
}
matcher.appendTail(buffer);
System.out.println(buffer);

请注意,通常不希望对 HTML 内容使用正则表达式。但是,在这种情况下,您要替换的标签不是嵌套的,正则表达式可能是可行的。

关于Java-replaceFirst-跳转到下一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56608273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com