【问题标题】:Regular expression to highlight a html document?正则表达式突出显示html文档?
【发布时间】:2012-01-13 04:20:28
【问题描述】:

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

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

我试过了 -

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

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

【问题讨论】:

  • 请发布您的正则表达式,并可能提供更多详细信息,当 HTML 标记出现时,哪些具体不起作用。
  • 你不能只检查找到的字符串是否是 html 标签,eq 搜索 字符
  • 这让我想起了about HTML and regex。 :D

标签: java android html highlighting


【解决方案1】:

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

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

【讨论】:

  • 您的正则表达式效果很好,但是如果我只想将我的正则表达式应用于 标签内的内容怎么办?通过 html 解析器,你的意思是 Swing Parser 吗?一部手机做的事情是不是太多了?
  • 最简单的方法是int idx = html.indexOf("<body>"); int idx2 = html.lastIndexOf("</body>"); 然后像这样调整正则表达式匹配器的边界:matcher.region(idx, idx2+7)
【解决方案2】:

它应该看起来像这样,但在 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

它是如何工作的:您的问题不涉及标签的内容,您只想查找和替换标签之外或标签之间的文本。因此,通过首先将文本拆分为&lt;,然后再拆分为&gt;,您最终将拥有split2[0] 中的标签内容和split2[1] 中标签之外的文本,然后您可以对任一部分进行操作你需要

当您必须对 html 文本进行简单操作时,可以使用此技术。但是,一旦您需要识别标签和属性,最好使用 html 解析器。

【讨论】:

    【解决方案3】:

    如果您创建了返回 html 的服务器。你为什么不让它们已经突出显示?

    如果我理解得很好.. 问题是当您想要突出显示与标签具有相同模式的元素时,例如:&lt;a&gt;

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 2017-01-19
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 2017-03-11
      • 2013-06-16
      相关资源
      最近更新 更多