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

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

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

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

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

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

s.replaceAll(regex, "");

给我这个输出:

http://www.google.com

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

【问题讨论】:

    标签: java html regex href inverse


    【解决方案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,那对我来说是最重要的。
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2015-10-09
    • 2013-08-28
    相关资源
    最近更新 更多