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

解决方案 »

  1.   

        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));
        }
      

  2.   

    你举个例子,光是href的话1楼的方法可以~
      

  3.   

    同意 1楼的做法 href 的情况如此
      

  4.   

    正在学正则,弄了老半天才出来,.........呵呵,向楼上的几位学习....注:是看了老紫竹的改的,........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));
        } }
    }
      

  5.   


    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));
        }
      

  6.   

    感谢各位。顺便问下大家,1楼老紫竹的表达式Pattern p = Pattern.compile("href=[\\\"]?(.*?)[\\\"]?[\\s>]");中,为什么同样是转义,前面两个是3个\\\  后面一个s前却只有2个\\
    而且我平时用正则的时候 还有时是只要一个的。
    谢谢
      

  7.   

    匹配网址的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$