创建java正则表达式以获取href链接

Posted

技术标签:

【中文标题】创建java正则表达式以获取href链接【英文标题】:Creating java regex to get href link 【发布时间】:2012-01-08 14:53:07 【问题描述】:

抱歉,之前有人问过这个问题,但我在网上找不到任何答案。我很难弄清楚这个正则表达式的逆:

"\"[^>]*\">"

我想用 replaceAll 替换除链接之外的所有内容。所以如果我有一个类似这样的标签:

<p><a href="http://www.google.com">Google</a></p>

我需要一个能满足这个要求的正则表达式:

s.replaceAll(regex, "");

给我这个输出:

http://www.google.com

我知道有更好的方法可以做到这一点,但我必须使用正则表达式。非常感谢任何帮助,谢谢!

【问题讨论】:

【参考方案1】:

您不必使用replaceAll。更好地使用如下模式组:

Pattern p = Pattern.compile("href=\"(.*?)\"");
Matcher m = p.matcher(html);
String url = null;
if (m.find()) 
    url = m.group(1); // this variable should contain the link URL

如果您的 HTML 中有多个链接,请在循环中执行 m.find()

【讨论】:

谢谢,我很难实现它,因为我已经在使用模式/匹配器来查找以 .htm 和 .html 结尾的特定链接。 非常有用!谢谢你,亚历克斯。【参考方案2】:

如果字符串中总是有一个这样的链接,试试这个:

"(^[^\"]*\")|(\"[^\"]*)$"

【讨论】:

这行得通,但是当 href 标记在链接之前有 'id=' 时失败了。我应该在我的问题中添加这个,抱歉。【参考方案3】:

您可以查看http://regexlib.com/ 以获取您需要的所有正则表达式帮助。下面是 url :

^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$

【讨论】:

按照目前的编写方式,该正则表达式不适用于具有 winchester.us、amazon.co.uk、amazon.ca 等国家代码的网站。 你是绝对正确的。我强加我的做法犯了一个错误。 另外,不适用于 Java 6.0,至少不能在 replaceAll 方法中使用。 @user1070866,那对我来说是最重要的。

以上是关于创建java正则表达式以获取href链接的主要内容,如果未能解决你的问题,请参考以下文章

Android正则表达式获取网页源链接

替代正则表达式以解析链接的 HTML 页面 [重复]

Java之正则表达式

正则表达式

使用java创建正则表达式以从字符串中提取4位数字

Java 正则表达式