如何只替换匹配我的正则表达式模式的字符串部分?

时间:2015-08-03 13:43:53

标签: java regex

允许'说我的html变量中有String代码;

String htmlCode = "<span class='test'>test</span>"+
+"<a href=\"http://foo.com?id=<span class='test'>test</span>\">link</a>";

htmlCode变量将包含更多类似的链接,此外它还包含更多类似的spans

我想要替换标记<span</span>之间的所有内容,包括那些跨度,但前提是它们位于<a href标记中。这意味着我不想替换第一个span标记,但我想替换第二个标记。

我知道正则表达式可以做到这一点,但到目前为止我能够做到这一点:

htmlCode = htmlCode.replaceAll("<span.*?</span>", "");

但是,如果我只想在<a>标签中出现,我该如何定义?还有一种方法可以替换它,包括那些span标签吗?

1 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,您想要从span代码的href值中删除a个代码。

在这种情况下,您可以尝试使用类似

的内容
String htmlCode = "<span class='test'>test</span>"
        + "<a href=\"http://foo.com?id=<span class='test'>test</span>\">link</a>"
        + "<a href=\"http://foo.com?id=test2\">link</a>";
Document doc = Jsoup.parse(htmlCode);
System.out.println(doc);

for (Element el : doc.select("a[href*=<span]")){//select a with href which contains `<span`
    el.attr("href", Jsoup.parse(el.attr("href")).text());//sets new value for `href` attribute which will be 
    //parsed "http://foo.com?id=<span class='test'>test</span>" and text it represents
}

System.out.println("-----");
System.out.println(doc);

输出(之前/之后):

<html>
 <head></head>
 <body>
  <span class="test">test</span>
  <a href="http://foo.com?id=<span class='test'>test</span>">link</a>
  <a href="http://foo.com?id=test2">link</a>
 </body>
</html>
-----
<html>
 <head></head>
 <body>
  <span class="test">test</span>
  <a href="http://foo.com?id=test">link</a>
  <a href="http://foo.com?id=test2">link</a>
 </body>
</html>