【发布时间】:2011-10-13 11:54:05
【问题描述】:
我需要解析一个字符串并转义除 <a> 链接之外的所有 html 标记。
例如:
"Hello, this is <b>A BOLD</b> bit and this is <a href="www.google.com">a google</a> link"
当在我的 jsp 中打印出来时,我希望看到标签按原样打印出来(即转义,因此页面上的“A BOLD”实际上不是粗体),但 <a> 链接是指向 google 的实际链接在页面上。
我有一个小方法可以根据正则表达式拆分传入的字符串,以匹配各种格式的<a> 链接(带有空格、单引号或双引号等)。正则表达式如下:
myString.split("<a\\s[^>]*href\\s*=\\s*[\\\"\\|\\\'][^>]*[\\\"\\|\\\']\\s*>[^<\\/a>]*<\\/a>");
是的,这很可怕,而且可能效率低下,因此对其他建议持开放态度,但它确实在一定程度上起作用。它失败的地方是解析链接文本位。我希望它接受除</a> 结束标记之外的任何字符的零次或多次出现,但它会将其解析为除“”之外的任何字符的零次或多次出现",即作为单个字符而不是完整的 </a> 单词。例如,它与任何带有“e”的文本匹配。
有问题的位是:[^<\\/a>]*
如何更改它以匹配整个单词而不是其组成字符?我试过括号等,但没有任何效果。
【问题讨论】:
-
你的做法不好。使用真正的解析器。如果是 XHTML,则可以将其解析为 XML。
-
Don't use regex to parse HTML。您可以尝试改用jsoup。
-
你最好使用 Html 解析器。
-
我会给 jsoup 一个狂欢。谢谢。
-
@skyuzo +1 只是为了指出另一个问题!!