正则表达式突出显示一个HTML文档?

时间:2011-12-05 12:10:18

标签: java android html highlighting

我正在构建一个具有webview的Android应用程序。 webview将显示从服务器返回的html文档。

根据搜索字符串,我必须突出显示html文档的几个部分。如果搜索字符串是'hello world',那么我必须标记与正则表达式(hello)|(world *)匹配的文本。

我试过了 -

我从服务器获取html文档。使用模式和匹配器使用正则表达式搜索文本。我替换匹配的单词,使其看起来像突出显示。没有html标签时效果很好。但是当网络服务器中的文档中有html标签并且我的搜索字符串与其中一个标签匹配时,请将其搞砸。

我希望我很清楚。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

我建议使用HTML解析器,然后只在解析器返回的树中的文本节点上使用正则表达式。排除标签的正则表达式将非常复杂,特别是考虑到标签具有可以(名称或值)导致正则表达式匹配的属性(更不用说javascript片段。

如果没有HTML解析器,您应该尝试正则表达式: "<[^>]++>([^<]++)<[^>]++>然后从结果中取出第1组,并使用hello|world替换为正则表达式。

答案 1 :(得分:0)

它看起来应该是这样,但在java;)中:

split1 = split string around '<'

for each element in split1 as s1:
 split2 = split s1 around '>'
 apply regex and replace on split2[1] 
 s1 = join split2 using '>' as glue
end for;

result = join split1 using '<' as glue

工作原理:您的问题不涉及标签的内容,您只想查找和替换标签之外或文本之间的文本。因此,首先按<然后按>拆分文字,最终会得到split2[0]中标记的内容以及split2[1]中标记之外的文字,然后你可以根据需要操作任何一个部分

只要您对html文本执行简单操作,就可以使用此技术。但是一旦你需要识别标签和属性,你最好去一个HTML解析器。

答案 2 :(得分:0)

如果您制作了返回html的服务器。为什么不让它们突出显示?

如果我理解得很好..问题是当你想要突出显示与标签具有相同模式的元素时:<a>