黑马程序员---正则表达式

------- android培训java培训、期待与您交流! ----------

正则表达式符合一定规则的表达式

作用:用于专门操作字符串
特点:用特定符号来表示一些代码操作,简化了书写。
学习正则表达式就是学习一些特殊符号的使用!
好处:可以简化对字符串的复杂操作

弊端:阅读性差


具体操作功能:

1,匹配:String matches()方法。用规则匹配整个字符串

2,切割:String split()

3,替换:replaceAll()

4,获取:按规则取子串


 步骤:

    a,将正则表达式封装对象
    b,正则对象和操作的字符串相关联
    c,获取正则匹配引擎
    d,通过引擎对符合规则的子串操作

 

练习和演示:

public class RegexDemo 
{
	public static void main(String[] args)
	{
		//check();
		
		splitD();
	}
	
	//匹配
	public static void check()
	{
		//1
		/*String qq="1223435";
		String reg="[1-9]\\d{4-14}";//首位非0的5-15位数字
		boolean a=qq.matches(reg);//返回boolean
		
		//2
		String tel="13343647653";
		String reg1="[1][358]\\d{9}";//13,15,18号段的11位数字
		boolean b=tel.matches(reg1);*/
		//3
		String str="a";
		String reg2="[a-zA-Z]\\d*";//首位字母后边有或没有数字
		System.out.println(str.matches(reg2));
	}
	//切割split()
	public static void splitD()
	{
		String str="sdfj   jga   gjr ";
		String reg=" +";//按一个或多个空格切割//按照。来切割写"\\."因为.是特殊字符//按\\切写"\\\\"//按照叠词"(.)\\1+"
		String[] arr=str.split(reg);//返回一个字符串数组
		//遍历打印
		for(String s:arr)
		{
			System.out.println(s);
		}
	}
	//替换 replaceAll()
	public static void replaceD()
	{
		String str="1324ggerth5443yh4";
		str=str.replaceAll("\\d{2,}","*");//将多于两个的连续数字替换成*
		//将叠词替换replaceAll("(.)\\1+","$1");$代表引用前边规则的组
	}
}


获取:

 

import java.util.regex.*;

public class RegexDemo2 
{
	public static void main(String[] args)
	{
		getDemo();
	}
	public static void getDemo()
	{
		String str="fals kde ksdfj wief,  ale kf";
		//规则
		String reg="\\b[a-z]{3}\\b";//\b单词边界
		//将规则封装成对象
		Pattern p=Pattern.compile(reg);//格式。。。
		//关联对象和字符串
		Matcher m=p.matcher(str);
		while(m.find())//find是将规则作用在字符串上
		{
			System.out.println(m.group());//group获取find后的结果。
		}
		
	}
}


 

两个练习:

 

将文字改成我爱中国
 用到替换

import java.util.*;
public class RegexTest 
{
	public static void main(String[] args)
	{
		//method();
		//ipSort();
		checkMail();
	}
	
	public static void method()
	{
		String str="我.我爱爱..爱爱中.中中...中国国";
		//定义规则
		String reg1="\\.+";
		String reg2="(.)\\1+";
		
		str=str.replaceAll(reg1, "").replaceAll(reg2, "$1");
		System.out.println(str);
	}
	
	public static void ipSort()
	{
		String ip="192.168.0.2 193.168.3.2  192.168.0.1 2.2.24.3";
		//保证每个地址段最少三位
		ip=ip.replaceAll("(\\d+)", "00$1");//一个或多个数字,替换成多加两个0的一个或多个数字
		//确定每个字段有三位
		ip=ip.replaceAll("0*(\\d{3})", "$1");//0*前边没有或多个0,后边确定有三个数字,替换成三个数字
		//按照空格切割
		String[] arr=ip.split(" +");//存到数组里
		//新建一个可排序集合:TreeSet
		TreeSet<String> ts=new TreeSet<String>();
		//将数组元素添加到集合中
		for(String s:arr)
		{
			ts.add(s);
		}
		//将集合中元素打印出来,(集合自动排序)
		for(String s:ts)
		{
			System.out.println(s.replaceAll("0*(\\d+)", "$1"));//将前边的0去掉
		}
	}
	
	//对邮件地址进行校验
	public static void checkMail()
	{
		String mail="saffsd@sina.com";
		String reg="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-z]+){1,3}";
		System.out.println(mail.matches(reg));
	}
}


 

网页爬虫

 

import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.*;
public class RegexTest2 
{
	public static void main(String[] args) throws IOException
	{
		URL url=new URL("");//写入服务器地址,访问文件地址
		URLConnection con=url.openConnection();
		BufferedReader br=
				new BufferedReader(new InputStreamReader(con.getInputStream()));
		String line=null;
		
		
		String reg="\\w+@\\w+(\\.\\w+)+";
		Pattern p=Pattern.compile(reg);
		
		while((line=br.readLine())!=null)
		{
			Matcher m=p.matcher(line);
		while(m.find())
		{
			System.out.println(m.group());
		}
		}
	}	
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值