正则表达式应用(重点:爬虫)
正则学习步骤:
1、正则表达式的规则与方法介绍
2、正则常见方法演示
3、正则表达式应用(重点:爬虫)
package regex.test;
import java.util.TreeSet;
publicclass RegexTest {
public static voidmain(String[] args) {
/*需求:
* 1、治疗口吃:我我我..我我我..我要.....要要..要..要学学学...学学..学编...编编编编...编编....编程...程程程程程程
* 2、对IP地址排序。
* 3、对邮件地址校验。
*
*/
test_3();
}
public static void test_3() {
/*
*3、对邮箱地址校验。
*
*/
String mail="abc2@sina.com";
String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-z] {1,3})";
// regex="\\w+@\\w+(\\.\\w+)+";
boolean b=mail.matches(regex);//1@1.1
System.out.println(mail+":"+b);
}
public static void test_2() {
/*
* 2、ip地址排序。
* 192.168.25.1 127.0.0.1 1.1.1.1 105.12.0.1
*/
String ip_str="192.168.25.1 127.0.0.1 1.1.1.1 105.12.0.1";
//1、为了让ip可以按照字符串循序比较,只要让ip的每一段循序相同。
//所以,补零,按照每一位所需做多零补充。每一段都加两个0。
ip_str=ip_str.replaceAll("(\\d+)", "00$1");
System.out.println(ip_str);
//然后每一段保留数字3位。
ip_str=ip_str.replaceAll("0*(\\d{3})", "$1");
System.out.println(ip_str);
//2、切出IP地址。
String[] ips=ip_str.split(" +");
TreeSet<String> ts=newTreeSet<String>();//TreeSet集合元素会自动按字符串大小进行排序。
for(Stringip:ips) {
// System.out.println(ip);
ts.add(ip);
}
for(Stringip:ts) {
//3、删除多余的0。
System.out.println(ip.replaceAll("0*(\\d+)", "$1"));
}
}
public static void test_1() {
/*
* 1、治疗口吃。
*
*/
String str="我我我..我我我..我要.....要要..要..要学学学...学学..学编...编编编编...编编....编程...程程程程程程";
//将字符串中的.去掉。用替换。
str=str.replaceAll("\\.+", "");
System.out.println(str);
//替换叠词。
str=str.replaceAll("(.)\\1+", "$1");
System.out.println(str);
}
}
网页爬虫
package regex.test;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 网页爬虫:其实就是一个程序用于在互联网中获取指定规则的数据。
*
* 爬取邮箱地址。
* 步骤:
* 1、读取源文件。
* 2、对读取的数据进行规则的匹配。从中获取符合规则的数据。
* 3、将符合规则的数据存储到集合中。
*/
publicclass RegexTest2 {
publicstatic void main(String[] args) throws IOException {
List<String>list=getMailsByWeb();
for(Stringmail:list) {
System.out.println(mail);
}
}
public static List<String> getMailsByWeb() throwsIOException {
//1、读取源文件。
// BufferedReader bufr=newBufferedReader(new FileReader("E:\\mail.html"));
URL url=new URL("https://hao.360.cn/?src=lm&ls=n24acbb3e9d");
BufferedReaderbufIn=new BufferedReader(newInputStreamReader(url.openStream()));
//2、对读取的数据进行规则的匹配。从中获取符合规则的数据。
// Stringmail_regex="\\w+\\w+(\\.\\w+)+";
String mail_regex="http://\\w+(\\.\\w+)+";
List<String>list=new ArrayList<String>();
Patternp=Pattern.compile(mail_regex);
String line=null;
while((line=bufIn.readLine())!=null) {
//3、将符合规则的数据存储到集合中。
Matcherm=p.matcher(line);
while(m.find()){
list.add(m.group());
}
}
return list;
}
public static List<String> getMails() throws IOException{
//1、读取源文件。
BufferedReader bufr=newBufferedReader(new FileReader("E:\\mail.html"));
//2、对读取的数据进行规则的匹配。从中获取符合规则的数据。
String mail_regex="\\w+@\\w+(\\.\\w+)+";
List<String> list=newArrayList<String>();
Patternp=Pattern.compile(mail_regex);
String line=null;
while((line=bufr.readLine())!=null) {
//3、将符合规则的数据存储到集合中。
Matcher m=p.matcher(line);
while(m.find()){
list.add(m.group());
}
}
return list;
}
}