我有个小问题。我有一个文本,我必须在浏览器中阅读几次。每次,我打开这个文本,自动启动我写的replaceAll。这很简单,很基本,但问题是,当我下次替换时(每次我读这篇文章时),我有一个replaceAll的replaceAll。例如,我在文本中有:
XIII我想将其替换为
<b>XIII</b>通过以下方式:
txt.replaceAll("XIII","<b>XIII</b>")第一次一切都很好,但后来,当我再次阅读文本时,它变成了:
<b><b>XIII</b></b>这是一个愚蠢的问题,但我现在从Java开始。我看过可以用regex.Could的人发个小例子?
谢谢,对不起,我的英语很差。
发布于 2013-02-06 20:02:56
您需要负向回溯以防止匹配已标记的字符串:
txt.replaceAll("(?<!>)XIII","<b>XIII</b");这个表达式看起来有点令人费解,但它的分解方式如下:
(?<! ... )是负数的模板,lookbehind;>是我们要确保不出现在字符串前面的特定字符。我还应该警告你,用正则表达式修复HTML通常会变成一个恶毒的循环,升级正则表达式来处理另一个特殊情况,只会看到它在下一个情况下失败。它最终变成了一个没有人能读懂的怪物,更不用说改进了。
发布于 2013-02-06 20:04:18
有一个非常快速的解决方案。在做你自己的之前,做相反的替换。
让我来展示一下:
txt.replaceAll("<b>XIII</b>","XIII").replaceAll("XIII","<b>XIII</b>")因此,您首先将您的<b>转换为普通,然后使用<b>将其恢复,并且无需添加新的<b>级别即可实现相同的结果。
发布于 2013-02-06 20:06:51
这样如何:
txt = txt.replaceAll ("XIII", "<b>XIII</b>").
replceAll ("<b><b>", "<b>").replaceAll ("</b></b>", "</b>");我认为<b><b>和</b></b>在超文本标记语言中没有太多意义,所以即使在其他地方也可以去掉重复的内容。
https://stackoverflow.com/questions/14728574
复制相似问题