java采集网址正则表达式练习一
2008-03-30 00:30
483 查看
为了用正则表达式匹配网址,整整弄了两天。还好,在慢慢进步。匹配<a>到</a>之间的区域,只需用
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
String regex ="<a.*?/a>";
就可以了。但是,还是有点不懂。 符号 “.”表示任意字符串,而*表示一个或多个字符串。那应该就够了,为什么还要加个问号呢?
查看了帮助文档,看到有几个说明。哎,但是还是不懂怎么用!
帮助文档的说明:
我的源代码:
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;
}
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
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;
}
}
相关文章推荐
- java采集网址正则表达式(源代码)
- 匹配文本中的网址java正则表达式
- 【JAVA正则表达式综合练习】
- Java程序练习:设计用户输入界面,获取网址采集规则
- java正则表达式匹配网页所有网址和链接文字的示例
- java正则表达式练习
- 用java正则表达式验证字符串(邮箱与网址)
- 网站采集 url网址正则表达式
- Java 正则表达式 练习
- 菜鸟看java之正则表达式练习:验证邮箱。
- Java正则表达式与IO流简单练习
- Java正则表达式练习
- 文章采集与网址抓取-正则表达式
- 匹配文本中的网址java正则表达式
- 【Java】利用正则表达式判断是否为网址
- 匹配文本中的网址java正则表达式
- Java正则表达式获取网址和链接文字解析 .
- java正则表达式 匹配文本中的网址
- Java正则表达式获取网页所有网址和链接文字
- java正则表达式练习之分析lrc文件