我有一点问题.
我有一段文本必须在浏览器中阅读几次.
每当我打开此文本时,都会自动启动我编写的replaceAll.
这是非常简单,基本的,但是问题是,当我下次替换时(每次阅读此文本时),我都具有replaceAll的replaceAll.
例如我在文本中:
XIII
我要替换它
<b>XIII</b>
与:
txt.replaceAll("XIII","<b>XIII</b>")
第一次一切都很好,但是,当我再次阅读该文本时,它变成:
<b><b>XIII</b></b>
这是一个愚蠢的问题,但是我现在从Java开始.
我读到可能使用正则表达式.有人可以举个小例子吗?
谢谢,请原谅我英语不好.
最佳答案
您需要使用后向否定性,以防止与已标记的字符串匹配:
txt.replaceAll("(?<!>)XIII","<b>XIII</b");
该表达式看起来有些令人费解,但是它是这样分解的:
>(?< ;! …)是负向后看的模板;
>>是我们要确保不会出现在字符串前面的特定字符.
我还应该警告您,用正则表达式修复HTML通常会变成一个双重循环,即升级正则表达式以处理另一种特殊情况,只是看到它在下一个失败.它以一个没人能读的怪物结束,更不用说改善了.