Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 544|回复: 0

[正则表达式学习]正则表达式学习-从一个URL中获取所有的超链接

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-3 00:02:22 | 显示全部楼层 |阅读模式
    下面的例子演示如何利用正则表达式从一个URL中查找并输出所有类似下面的超链接:

                   <a href="http://www.sina.com">

        首先我们从命令行输入URL地址,打开输入流,读取URL的内容并转化为字符串存入HTMLString中。然后以"(<a\s*href=[^>]*>)"构造正则表达式,最后在字符串htmlString中查找匹配的字符串。

    import java.io.*;
    import java.net.*;
    import java.util.regex.*;
    public class GetHref {
         public static void main(String[] args) {
             InputStream in = null;   
             PrintWriter out = null;
             String htmlString=null;  
      
       
       
         
       

       
       
      
             try {
                 // Check the arguments
                 if ((args.length != 1)&& (args.length != 2))  
                     throw new IllegalArgumentException("Wrong number of args");
          
                 // Set up the streams
                 URL url = new URL(args[0]);   // Create the URL
                 in = url.openStream();        // Open a stream to it
                 if (args.length == 2)         // Get an appropriate output stream
                     out = new PrintWriter(new FileWriter(args[1]));
                 BufferedReader bin=new BufferedReader(new InputStreamReader(in));
                 String line;
                 StringBuffer sb = new StringBuffer();
                 while((line=bin.readLine())!=null){
                   if(out!=null) out.println(line);
                   sb=sb.append(line);
                 }
                 htmlString=sb.toString();
               // System.out.println(sb.toString());
    }
             // On exceptions, print error message and usage message.
             catch (Exception e) {
                 System.err.println(e);
                 System.err.println("Usage: java GetURL <URL> [<filename>]");
             }
             finally {  // Always close the streams, no matter what.
                 try { in.close();  out.close(); } catch (Exception e) {}
             }

             Pattern p = Pattern.compile("(<a\s*href=[^>]*>)");         
             Matcher m = p.matcher(htmlString);
             boolean result = m.find();
             while(result){
                for(int i=1;i<=m.groupCount();i++){
                 System.out.println(m.group(i));
                }
              result=m.find();
             }
         }
    }
    程序运行结果:
    C:java>java    GetHref http://127.0.0.1:8080/zz3zcwbwebhome/index.jsp
    <a href="mailto:zz3zcwb@sina.com">
    <a href="javascript:" class="bb" onclick="window.external.addFavorite("http://ww
    w.zzedu.gov.cn","java学习室")">
    <a href="javascript:" class="bb" onClick="this.style.behavior="url(#default#home
    page)"this.setHomePage("http://10.10.1.1/index.jsp");">
    <a href="learn.jsp">
    <a href="download.jsp">
    <a href="article.jsp">
    <a href="#">
    <a href="#">
    <a href="#">
    <a href="#" class="FrameTeitle">
    <a href="#" class="FrameTeitle">
    <a href=view.jsp?id=89>
    <a href=view.jsp?id=88>
    ..........................
      网上的另一个程序:
    1. /**//*
    2. 功能 根据输入的网址、起止字符串,采集网址页面的超链接
    3. */


    4. import java.net.*;
    5. import java.io.*;
    6. import java.util.regex.*;

    7. public class GetHtmlLink
    8. {
    9.     String sourceURL;//需要采集的网页网址
    10.     String sourceContent;//网页页面内容
    11.     //String URLs; //采集到的超链接
    12.     //String title;//采集到的链接文字
    13.     String beginStr;//网页内容匹配区域开始字符串
    14.     String endStr;//网页内容匹配区域结束字符串
    15.     String matchContent;//网页内容匹配区域
    16.    
    17.     public static void main(String[] args)
    18.     {
    19.         GetHtmlLink ghl=new GetHtmlLink("http://www.xxx.com","< body","< /body>");
    20.         //System.out.println("text="+ghl.getMatchContent());
    21.       
    22.         ghl.getLink(ghl.matchContent);
    23.          
    24.         
    25.     }
    26.    
    27.     //根据传来的网页网址、匹配区域起止字符串初始化
    28.     public GetHtmlLink(String sourceURL,String beginStr,String endStr)
    29.     {
    30.          this.sourceURL=sourceURL;
    31.          this.beginStr=beginStr;
    32.          this.endStr=endStr;
    33.          sourceContent=getSourceContent();
    34.          //System.out.println("source="+sourceContent);
    35.          matchContent=getMatchContent();
    36.     }
    37.    
    38.     //获取网页页面内容
    39.     public  String getSourceContent(){
    40.         StringBuffer sb=new StringBuffer();
    41.         try
    42.         {
    43.             URL newURL=new URL(sourceURL);
    44.             BufferedReader br=new BufferedReader(new InputStreamReader(newURL.openStream()));
    45.                                                                
    46.                     
    47.             String temp;
    48.             while((temp=br.readLine())!=null)
    49.             {
    50.                 sb.append(temp);
    51.             }
    52.             
    53.         }catch(MalformedURLException e){
    54.             e.printStackTrace();
    55.         }
    56.         catch(IOException e){
    57.             e.printStackTrace();
    58.         }
    59.        return sb.toString();
    60.     }
    61.    
    62.    
    63.      //获取匹配区域
    64.     public String getMatchContent()
    65.     {
    66.         
    67.         String regex=beginStr+".*"+endStr;
    68.         //System.out.println(regex);
    69.         Pattern pt=Pattern.compile(regex);
    70.         Matcher mt=pt.matcher(sourceContent);
    71.         if(mt.find())
    72.         {
    73.             return mt.group();
    74.         }
    75.         else return null;
    76.         
    77.   }

    78.   //获取需要并打印:超链接和标题
    79.   public void getLink(String s)
    80.   {
    81.       int counter=0;//计算器 计算超链接的个数
    82.    
    83.       
    84.       String regexURL="< a\s*?href=([^>]*?)>(.*?)< /a>";//*?懒惰匹配
    85.       Pattern pt=Pattern.compile(regexURL);
    86.       Matcher mt=pt.matcher(s);
    87.    
    88.       while(mt.find())
    89.       {
    90.           counter++;                       
    91.            //打印mt.group(0);
    92.            System.out.println(mt.group());
    93.                
    94.                //获取并打印标题
    95.                 String title=mt.group(2);
    96.                System.out.println("标题:"+title);
    97.                
    98.                 //获取并打印网址
    99.                 String urls=mt.group(1);
    100.               // System.out.println("网址:"+urls);
    101.                String urlsRegex="(.*?\.((html)|(jsp)|(com)|(cn)|(net)|(asp)|(htm))).*?";
    102.             
    103.                Matcher mt2=Pattern.compile(urlsRegex).matcher(urls);
    104.                while(mt2.find())
    105.                {
    106.                 System.out.println("网址:"+mt2.group(1));
    107.               }

    108.                 //System.out.println("网址:"+urls);

    109.                 System.out.println();//空行
    110.          
    111.          
    112.       }
    113.       
    114.          System.out.println("共有"+counter+"个符合结果");
    115.   }
    116.   

    117.    
    118. }
    复制代码

    源码下载:http://file.javaxxz.com/2014/11/3/000222359.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-11-11 20:14 , Processed in 0.646691 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表