我有以下代码
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/