gpt4 book ai didi

java - 需要查找包含其他标签的 HTML pre 标签

转载 作者:行者123 更新时间:2023-12-01 09:44:54 24 4
gpt4 key购买 nike

我的 HTML 内容为 <pre>包含其他标签的标签。 <pre> 中的所有尖括号内容应该使用 HTML 实体进行转义。换句话说,每个 <应该变成&lt;以及每个>应该变成&gt; .

对于初学者来说,我只想找出哪些文件包含违规内容。谁能想出一种使用正则表达式来做到这一点的方法:

不好:正则表达式应该与此匹配

<body>
<h1>My Content</h1>
<pre class="some-class">
<foo>
<bar>Content</bar>
<script>
alert('Hi!');
</script>
</foo>
<br>
</pre>

<p>The middle</p>

<pre class="other-class">
<bar>
<foo>Text</foo>
<script>
alert('Bye!');
</script>
</bar>
<br>
</pre>
<p>The end</p>
</body>

好:正则表达式不应与此匹配。

<body>
<h1>My Content</h1>
<pre class="some-class">
&lt;foo&gt;
&lt;bar&gt;Content&lt;/bar&gt;
&lt;script&gt;
alert('Hi!');
&lt;/script&gt;
&lt;/foo&gt;
&lt;br&gt;
</pre>

<p>The middle</p>

<pre class="other-class">
&lt;bar&gt;
&lt;foo&gt;Text&lt;/foo&gt;
&lt;script&gt;
alert('Bye!');
&lt;/script&gt;
&lt;/bar&gt;
&lt;br&gt;
</pre>
<p>The end</p>
</body>

最佳答案

要在正则表达式中查找最短匹配,请使用.*?。另外,为了让 . 匹配换行符,需要 DOT_ALL、(?s).

Pattern prePattern = Pattern.compile("(?si)(<pre[^>]*>)(.*?)</pre>");
StringBuffer sb = new StringBuffer(html.length() + 1000);
Matcher m = prePattern.matcher(html);
while (m.find()) {
String text = m.group(2);
text = text.replace("<", "&lt;").replace(">", "&gt;");
m.appendReplacement(sb, m.group(1) + text + "</pre>");
}
m.appendTail(sb);
html = sb.toString();

关于java - 需要查找包含其他标签的 HTML pre 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38145097/

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