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

Java 如何仅替换与我的正则表达式模式匹配的字符串部分?,java,regex,Java,Regex,让我们假设我的字符串变量中有这个html代码 String htmlCode = "<span class='test'>test</span>"+ +"<a href=\"http://foo.com?id=<span class='test'>test</span>\">link</a>"; 但是如何定义仅当它出现在标记中时才替换它?另外,是否有办法替换它,包括那些span标记?如果我正确理解了您的问题,您希望从hre

让我们假设我的
字符串
变量中有这个
html
代码

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

但是如何定义仅当它出现在
标记中时才替换它?另外,是否有办法替换它,包括那些
span
标记?

如果我正确理解了您的问题,您希望从
href
标记的
a
值中删除
span
标记

在这种情况下,您可以尝试以下方法

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);
String htmlCode=“测试”
+ ""
+ "";
Document doc=Jsoup.parse(htmlCode);
系统输出打印项次(doc);

对于(元素el:doc.select(“a”)[href*=为此,您应该使用HTML解析器,例如。您可以使用
a>span
选择器并删除所有返回的节点。实际上,我使用的是JSoup,我将使用它。我想知道如何使用字符串。因为它不必是HTML,对吗?但谢谢。@反斜杠您应该将其作为答案发布。所以我可能会(也可能不会)设计这样的正则表达式。然后你会意识到它不适用于嵌套的
span
和/或嵌套的
a
标记…@Pshemo我们都被开玩笑过:)看看代码,span不是
a
标记的子代:)JSoup在这里不会对
a>span
选择器做任何事情,但我不明白
JSoup.parse(el.attr(“href”).text()将如何删除
span
标记。@OndrejTokar
text()
方法从解析的字符串中去掉标记,因此它将删除
@OndrejTokar
Jsoup。parse
返回
文档
,该文档扩展
元素
类并从中继承
文本()
方法。您可以在这里找到它的文档:简言之,返回的文本将从存储的HTML结构生成,如
helloworld
将成为
helloworld
。它模拟了您在浏览器中看到的文本。我使用了另一种解决方案,但由于它不在这里,我假设您做了某种安静的操作同意,所以我会接受你的回答。我的问题有那么糟糕,它有负值吗?如果你认为它没有那么糟糕,我会感谢+1评级,所以我没有-1;/。谢谢
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>