gpt4 book ai didi

java - 正则表达式,从 HTML 中提取具有特殊名称的 href 属性

转载 作者:行者123 更新时间:2023-11-30 08:40:41 26 4
gpt4 key购买 nike

例如有这样一个字符串:

<a href="LINK_1" class="am"> Some Text</a>.. ANYTHING ..<a href="LINK_2" class="am"> Some Text</a><a href="SEARCHED_HREF_TO_EXTRACT" class="am"> SEARCHED_TEXT</a>..

我需要从一个 HTML 链接中提取一个“href”属性值,从一个包含一些搜索词的链接中提取,例如“SEARCHED_TEXT”。能否请您指教,如何正确地做到这一点?不会问是否已经发送了很多时间 =)

我做到了这一点,但不幸的是它无法正常工作..

String str = "<a href=\"LINK_1\" class=\"am\"> Some Text</a>.. ANYTHING ..<a href=\"LINK_2\" class=\"am\"> Some Text</a><a href=\"SEARCHED_HREF_TO_EXTRACT\" class=\"am\"> SEARCHED_TEXT</a>";
Pattern pattern = Pattern.compile("<a.*?href=\"(.*?)\".*SEARCHED_TEXT</a>");
Matcher matcher = pattern.matcher(str);

while (matcher.find()) {
System.out.println(matcher.group(0)); // matched whole string
System.out.println(matcher.group(1)); // should be SEARCHED_HREF_TO_EXTRAC

我看到我需要在 href="(.*?)"之后进行一些协商以接受除

之外的所有符号
</a>

找到正确的 HREF,但无法使其工作 :(

最佳答案

不要在这里使用正则表达式,因为它不是处理嵌套结构的合适工具(最后是 Java 中使用的正则表达式风格,因为它不支持递归),如 HTML/XML
(更多信息:Can you provide some examples of why it is hard to parse XML and HTML with a regex?)。

合适的工具是 HTML/XML 解析器。我可能会选择 jsoup因为它的简单性和 CSS 查询支持。

因此您的代码可能如下所示:

String html = "<a href=\"LINK_1\" class=\"am\"> Some Text</a>.. ANYTHING ..<a href=\"LINK_2\" class=\"am\"> Some Text</a><a href=\"SEARCHED_HREF_TO_EXTRACT\" class=\"am\"> SEARCHED_TEXT</a>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a:contains(SEARCHED_TEXT)"); //contains is case-insensitive
System.out.println(links.attr("href"));

或者如果您希望找到许多链接,遍历找到的元素并从每个元素中获取 href 属性:

for(Element link : links){
System.out.println(link.attr("href"));
}

关于java - 正则表达式,从 HTML 中提取具有特殊名称的 href 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35530304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com