【问题标题】:Replacing keyword in string that is HTML page using Java使用Java替换作为HTML页面的字符串中的关键字
【发布时间】:2011-06-13 11:56:44
【问题描述】:

我有以下字符串:

<html>
<head><meta>...</meta><head>
<body>
   <div id="foo">
     Text I want to search & replace occurrences
     of keywords such as Foo or foo while ignoring case
   </div>
</body>
</html>

我想结束的是:

<html>
<head><meta>...</meta><head>
<body>
   <div id="foo">
     Text I want to search & replace occurrences
     of keywords such as <b>Foo</b> or <b>foo</b> while ignoring case
   </div>
</body>
</html>

我非常想搜索foo 并将其替换为&lt;b&gt;foo&lt;/b&gt;&lt;b&gt;Foo&lt;/b&gt;。保留要替换的字符串的大小写但与关键字foo 匹配,同时忽略匹配的大小写,这一点很重要。

另一个重要的事情是替换忽略所有 html 标记及其内容。请注意,&lt;div id="foo"&gt; 保持不变。

我起草了这个,但还没有测试它

 text = text.replace("(?i)"+keyword+"(?!([^<]+)?>)", "<b>"+keyword+"</b>");

上面的问题是它不记得要替换的单词的大小写,而只是放入关键字。

【问题讨论】:

    标签: java html string replace


    【解决方案1】:
    text.replaceAll("(?i)(" + keyword + ")(?!([^<]+)?>)", "<b>$1</b>")
    

    【讨论】:

    • 您是否因为我先回答而对我的回答投了反对票?
    • 对整个匹配的反向引用表示为 $0。如果有捕获括号,您可以将特定组引用为 $1、$2 等。
    • @adrianboimvaser:不!我没有!当我看到你的时,我实际上正要删除我的,但后来我意识到你写了 0 美元......你用我的回答做了吗? :)
    • @Costi Ciudatu:对不起,我看到我的第一张选票消失了。当然不是!
    • @adrianboimvaser:我知道,我只是在开玩笑。也许我的“答案”应该只是对你的评论......@Mat Banik:你应该接受第一个答案,但我发布的小修复是:$1 而不是 $0 :)
    【解决方案2】:

    你需要使用capturing group,顺便说一下,使用replaceAll

    text = text.replaceAll("(?i)("+keyword+")(?!([^<]+)?>)", "<b>$0</b>");
    

    【讨论】:

    • replaceAll() 采用正则表达式,而 replace() 仅采用文字序列
    【解决方案3】:

    应该是这样的,即应该设置单词边界:

    text.replaceAll("(?i)(\\b" + keyword + "\\b)(?!([^<]+)?>)", "<b>$1</b>")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 2013-07-09
      相关资源
      最近更新 更多