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

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


正则表达式:讲解及其练习


 好处:可以简化对字符串的复杂操作
 弊端:符号定义越多,正则越长,阅读性就越差。


字符类 
[abc]                        a、b 或 c(简单类) 
[^abc]      任何字符,除了 a、b 或 c(否定) 
[a-zA-Z]      a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
[a-d[m-p]]      a 到 d 或 m 到 p:[a-dm-p](并集) 
[a-z&&[def]]      d、e 或 f(交集) 
[a-z&&[^bc]]     a 到 z,除了 b 和 c:[ad-z](减去) 
[a-z&&[^m-p]]     a 到 z,而非 m 到 p:[a-lq-z](减去) 




 预定义字符类 
.               任何字符(与行结束符可能匹配也可能不匹配) 
\d              数字:[0-9] 
\D              非数字: [^0-9] 
\s              空白字符:[ \t\n\x0B\f\r] 
\S              非空白字符:[^\s] 
\w              单词字符:[a-zA-Z_0-9] 
\W              非单词字符:[^\w] 






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 次 





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


2,切割:  String split();




3,替换:   String  replaceAll();




4,获取: 将字符串中的符合规则的子串取出;
操作步骤:
1,将正则表达式封装成对象
2,让正则对象和要操作的字符串相关联
3,关联后,获取正则匹配引擎
4,通过引擎对符合规则的字串进行操作,比如取出


class  RegexDemo
{
	public static void main(String[] args) 
	{
		//splitDemo("das,da,dsad",",");	  切割练习

		//splitDemo("sdddawdfffgre","(.)\\1+"); //+号是代表多个
										   // 叠词切割

		//matches_1();						//匹配练习



	   String s= "da343sd5545a676sf" ; //数据
		replaceAll_1(s,"\\d+","%");	//重叠字符替换成指定字符

		replaceAll_1(s,"(.)\\1+","$1"); //重叠字符 变为一个字符

	}

	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);
		}
	}

	public static void matches_1()
	{
		String s="12sd31235";
		String reg="[1-9]\\d{4,10}"; 

		boolean b = s.matches(reg);

		System.out.println(b);
	
	}

	public static void replaceAll_1(String s,String regex, String rep )
	{
		

		String  a = s.replaceAll(regex, rep);

		System.out.println(a);
	
	}
}


4,获取练习及注意事项


/*
获取

*/

import java.util.regex.*;

class RegexDemo2
{
	public static void main(String[] args) 
	{
		 getDemo();
	}
	  
	public static void getDemo()
	{
		String str= "asda  sfsa gfs gfgs he ";

		String reg = "[a-z]{4}"	;
		Pattern p =Pattern.compile(reg);

		Matcher m = p.matcher(str);

	    //System.out.println(m.matches());		 //System.out.println(m.matches());	  
												   //调用matches 匹配方法
	  while(m.find())
		{
		 //boolean b= m.find()	;				 // boolean b= m.find  将规则作用到字符串上,
		//System.out.println(b);				 //进行符合规则的字符串查找
	   
		   
			System.out.println(m.group());
										// m.group()  用于获取匹配后结果
		}								//m.start(); 开始角标
										 // m.end();  结束角标
	
	}


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值