3

我有一个小问题。我有一段文字,我必须在浏览器中多次阅读。每次,我打开这段文字,都会自动启动我写的replaceAll。它非常简单,基本但问题是当我下次替换时(每次我阅读这篇文章)我有一个replaceAll 的replaceAll。例如我在文本中有:

XIII

我想把它换成

<b>XIII</b>

和:

txt.replaceAll("XIII","<b>XIII</b>")

第一次一切都很好,但是当我再次阅读文本时,它变成了:

<b><b>XIII</b></b>

这是一个愚蠢的问题,但我现在从 Java 开始。我读到可以使用正则表达式。有人可以发布一个小例子吗?

谢谢,请原谅我糟糕的英语。

4

3 回答 3

3

您需要消极的lookbehind 以防止匹配已标记的字符串:

txt.replaceAll("(?<!>)XIII","<b>XIII</b");

这个表达式看起来有点复杂,但它是这样分解的:

  • (?<! ... )是负面后视的模板;
  • >是我们要确保不会出现在您的字符串前面的特定字符。

我还应该警告您,使用正则表达式修复 HTML 通常会变成一个升级正则表达式以处理另一种特殊情况的恶魔般的循环,只是看到它在下一个特殊情况下失败。它最终变成了一个没人能读懂的怪物,更不用说改进了。

于 2013-02-06T12:02:56.407 回答
1

有一个非常快速的解决方案。在自己做之前做相反的替换。

让我展示:

txt.replaceAll("<b>XIII</b>","XIII").replaceAll("XIII","<b>XIII</b>")

所以你先把你的<b>变成正常的,然后再把它转回来,<b>它会达到同样的结果,而不需要增加新的水平<b>

于 2013-02-06T12:04:17.873 回答
-1

那这个呢:

txt = txt.replaceAll ("XIII", "<b>XIII</b>").
    replceAll ("<b><b>", "<b>").replaceAll ("</b></b>", "</b>");

我认为<b><b>并且</b></b>在 HTML 中没有多大意义,因此即使在其他地方也可以删除重复项。

于 2013-02-06T12:06:50.573 回答