Java正则表达式的使用

通过Matcher类的find()和group()方法可以从目标字符串中依次提取出特定的字符串(匹配正则表达式的字串),例如互联网的网络爬虫,他们可以自动从网络网页识别出所有的电话号码。下面程序师范了如何从大字段中找出电话号码。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FinedGroup {
	public static void main(String[] args){
		//使用字符串模拟从网络上得到的网页源码
		String str="我想求购一本《疯狂Java讲义》,尽快联系我13500006666"+"求交朋友,电话号码是13611125565"+"出售二手电脑,联系方式15899903312";
		//创建一个pattern对象,并用它建立一个Matcher对象
		//该正则表达式只抓取13X和15X字段的手机号
		//实际要抓取那些电话号码,只要修正正则表达式即可
		Matcher m=Pattern.compile("((13\\d)|(15\\d))\\d{8}").matcher(str);
		//将所有符合正则表达式的字串(电话号码)全部输出
		while(m.find()){
			System.out.println(m.group());
		}
	}
}
从上面运行结果可以看出,find()方法一次查找字符串中与Pattern相匹配的字串,一旦找到了对应的子串,下次调用find()方法时将接着向下寻找。

通过程序可以看出,使用正则表达式可以提取网页上的电话号码,也可以提取邮件地址等信息。如果程序再进一步,可以从网页上提取超链接的信息,再根据超链接打开其他网页,然后在其他网页上重复这个过程就可以实现简单的网络爬虫了。

通过上面的学习我们可以总结出正则表达式的特点和好处,此处总结了几点学习正则表达式之后自己的总结经验。大家可以通过观看传智博客毕向东视频来做出相应的对照。

正则表达式的:符合一定规则的表达式
    作用:用于专门操作字符串
    特点:用于一些特定的符号来表示一些代码操作,这样就简化书写。
    所以学习正则表达式就是在学习一些特殊符号的使用
    好处:可以简化对字符串的复杂性
    弊端:符号定义越多,正则越长,阅读性越差


具体操作的功能
1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。


2.切割:String split()


3.替换:String replaceALL()

4.获取:将字符串中符合规则的字串取出。

正则表达式的数量限制
就是的三种数量模式

1.匹配:

public class Mate {
	public static void main(String[] args){
		checkQQ();
	}
	public static void checkQQ(){
		String qq="123453";
		String regex="[1-9][0-9]{4,14}";
		boolean b=qq.matches(regex);
		if(b){
			System.out.println(qq+"...is ok!");
		}else{
			System.out.println(qq+"... is not ok");
		}
	}
}

2.切割:

public class Cutting {
	public static void main(String[] args){
		splitDemo("erkktyqqquizzzzzzo","(.)\\1+");//按照叠词完成切割,为了可以让规则结果被重用
																	//可以将规则封装成一个组,用()完成,组的出现都有编号
																	//从1开始想要使用已有的组可以通过 \n(n为组的编号)的形式来获取
	}
	public static void splitDemo(String str,String reg){
		String[] arr=str.split(reg);
		System.out.println(arr.length);
		for(String s:arr){
			System.out.println(s);
		}
	}
}

3.替换

public class Replace {
	public static void main(String[] args){
		String str="wer12312423400000ty4124235235uiod512515f";
		replaceAllDemo(str,"\\d{5,}","#");
		String str1="erkktyqqquizzzzo";
		replaceAllDemo(str1,"(.)\\1","$1");
	}
	public static void replaceAllDemo(String str,String reg,String newStr){
		str=str.replaceAll(reg, newStr);
		System.out.println(str);
	}
}

4.获取:

/*
 * 操作步骤:
 * 1.将正则表达式封装成对象
 * 2.让正则对象和要操作的字符串相关联
 * 3.关联后,获取正则匹配引擎
 * 4.通过引擎对符合规则的字串进行操作,比如取出
 * */
public class RegexDemo2 {
	public static void main(String[] args){
		System.out.println();
		getDemo();
	}
	public static void getDemo(){
		String str="ming tain jiu yao fang jia le, da jia";
		//str="1124124";
		//String reg="[1-9]\\d{4,14}";
		String reg="\\b[a-z]{4}\\b";
		//将规则封装成对象
		Pattern p=Pattern.compile(reg);
		//让正则对象和要作用的字符串关联,获取匹配器对象
		Matcher m=p.matcher(str);
		//System.out.println(m.matches());//其实String类中的mathes方法,用的就是Pattern和Macher对象的来完成对类的
														//只不过被String的方法封装后的,用起来较为简单,但是功能单一
														//上个步骤已经传入matches方法中值
		
		/*boolean b=m.find();//将规则作用到字符串上,并进行符合规则的查找
		System.out.println(b);
		System.out.println(m.group());//获取String没有进行封装后的*/
		//group适用于获取匹配后的结果,首先需要进行先匹配
		//类似于迭代器
		//System.out.println(m.matches());
		while(m.find()){
			System.out.println(m.group());
			System.out.println(m.start()+1+"……"+m.end());
		}
	}
}















猜你喜欢

转载自blog.csdn.net/xiao_chainiao/article/details/76447598