收集网址
2010-01-28 20:50
225 查看
匹配<a>到</a>之间的区域,只需用
String regex ="<a.*?/a>";
就可以了。但是,还是有点不懂。 符号 “.”表示任意字符串,而*表示一个或多个字符串。那应该就够了,为什么还要加个问号呢?
查看了帮助文档,看到有几个说明。哎,但是还是不懂怎么用!
帮助文档的说明: Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次
Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超过 m 次
源代码:
String regex ="<a.*?/a>";
就可以了。但是,还是有点不懂。 符号 “.”表示任意字符串,而*表示一个或多个字符串。那应该就够了,为什么还要加个问号呢?
查看了帮助文档,看到有几个说明。哎,但是还是不懂怎么用!
帮助文档的说明: Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次
Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超过 m 次
源代码:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.net.*; import java.io.*; import java.util.regex.*; /* 根据指定的规则,通过构造正则表达式获取网址 */ public class Urls { private String startUrl; //开始采集网址 String urlContent; String ContentArea; private String strAreaBegin ,strAreaEnd ; //采集区域开始采集字符串和结束采集字符串 private String stringInUrl,stringNotInUrl; String strContent;//获得的采集内容 String[] allUrls; //采集到的所有网址 private String regex; //采集规则 public static void main(String[] args) { Urls myurl=new Urls("<body","/body>"); myurl.getStartUrl("http://www.baidu.com/"); myurl.getUrlContent(); myurl.getContentArea(); myurl.getStringInUrl("http://www.baidu.com/"); myurl.getStringNotInUrl("google"); myurl.Urls(); //System.out.println("startUrl:"+myurl.startUrl); //System.out.println("urlcontent:"+myurl.urlContent); //System.out.println("ContentArea:"+myurl.ContentArea); } //初始化构造函数 strAreaBegin 和strAreaEnd public Urls (String strAreaBegin,String strAreaEnd) { this.strAreaBegin=strAreaBegin; this.strAreaEnd=strAreaEnd; } // public void Urls() { int i=0; //String regex ="<a href="?'?http://[a-zA-Z0-9]+/.[a-zA-Z0-9]+/.[a-zA-Z]+/?[/.?[/S|/s]]+[a>]$"; String regex ="<a.*?/a>"; //String regex ="http://.*?>"; Pattern pt=Pattern.compile(regex); Matcher mt=pt.matcher(ContentArea); while(mt.find()) { System.out.println(mt.group());i++; } System.out.println("共有"+i+"个符合结果"); } //获得开始采集网址 public void getStartUrl(String startUrl) { this.startUrl=startUrl; } //获得网址所在内容; public void getUrlContent() { StringBuffer is=new StringBuffer(); try { URL myUrl=new URL(startUrl); BufferedReader br= new BufferedReader( new InputStreamReader(myUrl.openStream())); String s; while((s=br.readLine())!=null) { is.append(s); } urlContent=is.toString(); } catch(Exception e) { System.out.println("网址文件未能输出"); e.printStackTrace(); } } //获得网址所在的匹配区域部分 public void getContentArea() { int pos1=0,pos2=0; pos1= urlContent.indexOf(strAreaBegin)+strAreaBegin.length(); pos2=urlContent.indexOf(strAreaEnd,pos1); ContentArea=urlContent.substring(pos1,pos2); } //以下两个函数获得网址应该要包含的关键字及不能包含的关键字 //这里只做初步的实验。后期,保护的关键字及不能包含的关键字应该是不只一个的。 public void getStringInUrl(String stringInUrl) { this.stringInUrl=stringInUrl; } public void getStringNotInUrl(String stringNotInUrl) { this.stringNotInUrl=stringNotInUrl; } //获取采集规则 //获取url网址 public void getUrl() { } public String getRegex() { return regex; } }
相关文章推荐
- c#/asp.net/ajax/javascript 最佳学习网址收集
- 自然图像里的文本检测 数据库 网址收集
- WebKit学习网址收集
- 我收集的一些Flash相关技术的网址
- Deep Learning的国内外网址收集
- 英译中网址收集
- 如何用Java实现利用搜索引擎收集网址的程序
- 网址收集
- web开发过程需要的知识网址收集
- 我在网上收集的开源android app学习网址
- 收集一些swift学习 网址
- 计算机相关网址收集
- 基于Ruby On Rails的项目(包括Plugin)网址收集
- 网址收集
- 关于webrtc 视频的学习网址和 demo 收集
- 收集网址
- 收集的常用域名管理后台网址
- 2007年网络收藏夹网址收集
- 国内测试资料收集最全的网址
- 今天收集的好网址