Java Regex - 从 HTML anchor 提取链接

标签 java regex

我有以下代码

private String anchorRegex = "\\<\\s*?a\\s+.*?href\\s*?=\\s*?([^\\s]*?).*?\\>";
private Pattern anchorPattern = Pattern.compile(anchorRegex, Pattern.CASE_INSENSITIVE);
String content = getContentAsString();
Matcher matcher = anchorPattern.matcher(content);

while(matcher.find()) {
    System.out.println(matcher.group(1));
}

getContentAsString() 的调用返回网页中的 HTML 内容。我遇到的问题是 System.out 中打印的唯一内容是空格。谁能看出我的正则表达式有什么问题吗?

正则表达式有时让我抓狂。

最佳答案

您需要将捕获组与以下 .*? 分隔开。 href 周围可能有双引号 ",因此请使用它们:

<\s*a\s+.*?href\s*=\s*"(\S*?)".*?>

您的正则表达式包含:

([^\s]*?).*?

([^\s]*?) 表示勉强找到所有非空白字符并将它们保存在一个组中。但不情愿的 *? 取决于下一部分,即 .;任何字符。因此,href 的匹配会在第一时间中止,并且 .*? 会匹配 URL 的其余部分。

关于Java Regex - 从 HTML anchor 提取链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472002/

相关文章:

Python 正则表达式 : Multiple matches in one line (using findall())

java - 使用 Stripes 框架拦截和更改请求 url

java - 完全在 C++ 中使用 OpenCV Android

JavaFX。将多个带有图像的标签添加到 Pane

javascript - 描述正则表达式模式的正则表达式?

php - 为什么这个 PHP 无法验证?

java - 寻找SVG绘图应用程序,基于Java的开源 batik 库

java - 通过套接字接收的字符串在 python 中不进行比较

java - 使用 Java-Regex 将文本与 Regex 成对分割成几行

java regex - 仅匹配一次出现