日期:2014-05-20  浏览次数:20771 次

50分求网址的正则表达式

我要从一堆网页源码中提取网址。但是有些网址有双引号 有些没有
怎么写这个正则表达式?问题不难 只是急用 不想想了,谢谢!
至少能匹配下面两种方式: http://www.abc.com
或者 "http//:www.abc.com"

------解决方案--------------------
Java code
    String str = "<a href=\"http://www.abc.com\">12</a><a href=http://www.abc.com>123</a><a href=\"http://www.abc.com\" target=''>12</a>";
    Pattern p = Pattern.compile("href=[\\\"]?(.*?)[\\\"]?[\\s>]");
    Matcher m = p.matcher(str);
    while (m.find()) {
      System.out.println(m.group(1));
    }

------解决方案--------------------
你举个例子,光是href的话1楼的方法可以~
------解决方案--------------------
[a-zA-z]+://[^\s]*

------解决方案--------------------
探讨
Java codeString str="<a href=\"http://www.abc.com\">12</a><a href=http://www.abc.com>123</a><a href=\"http://www.abc.com\" target=''>12</a>";
Pattern p=Pattern.compile("href=[\\\"]?(.*?)[\\\"]?[\\s>]");
Matcher m=p.matcher(str);while(m.find()) {
System.out.println(m.group(1));
}



------解决方案--------------------
正在学正则,弄了老半天才出来,.........呵呵,向楼上的几位学习....

注:是看了老紫竹的改的,........
Java code

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Absf {

    public static void main(String[] args) {
        String str = "<a HREF=\"http://www.aasd.com\">12</a><a href=http://www.abc.com>123</a> <a href=\"http://www.woadfw.com\" target=''>12</a>";
       String pattern ="<\\s*a\\s*href\\s*=\\s*[\"]?([^\"|^<]*)[\"]?>?[\\s>]";
      System.out.println(pattern);
       Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); //有可能href是大写
        Matcher m = p.matcher(str);
        while (m.find()) {
          System.out.println(m.group(1));
        }

    }
}

------解决方案--------------------
Java code

Pattern p = Pattern.compile("href=[\"]?(.*?)[\"]?[\\s>]" ,Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
        Matcher m = p.matcher(html);
        while (m.find()) {
          System.out.println(m.group(1));
        }

------解决方案--------------------
\\ 是转意字符 代表反斜线符"\" 的意思

------解决方案--------------------
探讨
感谢各位。

顺便问下大家,1楼老紫竹的表达式Pattern p = Pattern.compile("href=[\\\"]?(.*?)[\\\"]?[\\s>]");

中,为什么同样是转义,前面两个是3个\\\ 后面一个s前却只有2个\\
而且我平时用正则的时候 还有时是只要一个的。
谢谢