黑马程序员————JAVA之正则表达式

------- http://www.itheima.com" target="blank">android培训http://www.itheima.com"target="blank">java培训、期待与您交流!
 
一.正则表达式基础概述:
  1.字符类:
	1).[aeiou]
	2).[^aeiou]
	3).[a-z]
	4).[a-zA-Z0-9]
  2.逻辑运算符:
	1).&&:与
	).|:或
  3.预定义字符类:
	1).".":任何字符
	2)."\d":任何数字,[0-9]的简写形式;
	3)."\D":任何非数字,[^0-9]的简写形式;
	4)."\s":任何空白字符。空格、制表符(\t)、换行符(\n)
	5)."\S":任何非空白字符。是[^\s]的简写形式;
	6)."\w":任何大写、小写字母,或数字或下划线。是[a-zA-Z_0-9]的简写形式;
	7)."\W":任何非单词字符。是[^\w]的简写形式;
  4.限定符:
	1)."+":1次或多次;
	2)."?":0次或1次;
	3)."*":0次或多次;
	4).{n}:恰好n次;
	5).{n,}:至少n次;
	6).{n,m}:n(包含)--m(包含)次
  5.String类中与正则表达式相关的方法:
	1).split(String regex):使用regex正则表达式的规则切割字符串;
	2).replaceAll(String regex,String newStr):使用newStr替换字符串中符合regex表达式的字符串;
  6.Pattern和Matcher类:
	Pattern p = Pattern.compile("a*b");
 	Matcher m = p.matcher("aaaaab");
 	boolean b = m.matches();
 
 7.正则表达式主要有四种具体功能:匹配、切割、替换和获取
   1)匹配:String类中的booleanmatches(String regex)方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
   2)切割:String类中的String[]split(String regex)方法。
     按叠词完成切割:为了让规则被重用,可将规则封装成一个组,用()完成。组的出现都有编号,从1开始。想要使用已有的组可通过\n(n就是组的编号)的形式来获取
     所匹配的字符,可以用$n来获取。$在正则中表示行的结尾,所以出现在正则中不能用来表示组,一般用于替换中。如下面功能中。
3)替换: String replaceAll(String regex,String replacement)方法。
4)取:将字符串中的符合规则的子串取出。
   操作步骤:
        1)将正则表达式封装成对象。
        2)让正则对象和要操作的字符串相关联。
        3)关联后,获取正则匹配引擎。
        4)通过引擎对符合规则的子串进行操作,比如取出。
 
 
 二、通过部分代码熟悉使用正则表达式
 
    
 1.验证QQ号码:
<span style="font-family:Microsoft YaHei;font-size:14px;">/*
 * 验证QQ号码:
 * 
 * 规则:
 * 1.必须全部是数字;
 * 2.5--11位;
 * 3.第一位不能为0;
 */
public class Demo {
	public static void main(String[] args) {
		String qq = "149459999998";
		System.out.println("自己验证QQ结果:" + checkQQ(qq));
		System.out.println("使用正则表达式结果:" + checkQQ2(qq));
	}
	//自己判断
	public static boolean checkQQ(String qq){
		//1.验证长度是否5--11位
		if(qq.length() < 5 || qq.length() > 11){
			return false;
		}
		//2.验证是否全部是数字
		for(int i = 0;i < qq.length() ; i++){
			char c = qq.charAt(i);
			if(c < '0' || c > '9'){
				return false;
			}
		}
		//3.判断第一位是否为0
		char c = qq.charAt(0);
		if(c == '0'){
			return false;
		}
		
		return true;
	}
	//使用正则表达式
	public static boolean checkQQ2(String qq){
		//定义一个正则表达式
		String regex = "[1-9]\\d{4,10}";
		return qq.matches(regex);
	}
}
</span>

 
 
  
<span style="font-family:Microsoft YaHei;font-size:14px;">2.跟正则表达式相关的_String的split方法;
/*
 * String的split()方法:切割字符串
 * 
 * 
 */
public class Demo {
	public static void main(String[] args) {
		//A.切割字符串"aa,bb,cc";
		String str = "aa,bb,cc";
		String[] strArray = str.split("[,]");
		for(int i = 0 ;i < strArray.length ; i++){
			System.out.println("--" + strArray[i]);
		}
		//B.切割字符串"aa.bb.cc";
		str = "192.168.100.232";
		strArray = str.split("[.]");
		for(int i = 0 ;i < strArray.length ; i++){
			System.out.println("--" + strArray[i]);
		}
		//	C.切割字符串“-1 99 4 23”;
		str = "-1 99 4 23";
		strArray = str.split("[ ]");
		for(int i = 0 ;i < strArray.length ; i++){
			System.out.println("--" + strArray[i]);
		}
		System.out.println("-----------------------------");
		//D."-1   99 4     23";
		str = "-1   99 4     23";
		strArray = str.split("[ ]+");
		for(int i = 0 ;i < strArray.length ; i++){
			System.out.println("--" + strArray[i]);
		}
	}
}
</span>

 
<span style="font-family:Microsoft YaHei;font-size:14px;">3.跟正则表达式相关的_String的replaceAll方法;

public class Demo {
	public static void main(String[] args) {
		//1.用”#”替换叠:"sdaaafghccccjkqqqqql";
		String str = "sdaaafghccccjkqqqqql";
		String regex = "(.)\\1+";
		System.out.println("将叠词替换为#:" + str.replaceAll(regex, "#"));
		
		//2.把多个叠词变成一个
		System.out.println("将叠词变为1个:" + str.replaceAll(regex, "$1"));
		
		//3.:有些论坛不允许发电话,qq号,银行账号等. 把数字用"*"替换
		str = "wert13245asfklwyoeworewsfd6744232433fafs";
		System.out.println("将数字替换为*符合:" + str.replaceAll("\\d+", "*"));

		
	}
}
</span>

    
<span style="font-family:Microsoft YaHei;font-size:14px;">4.限定符;

public class Demo {
	public static void main(String[] args) {
		//1.判断1位或多位数字:
		String str = "14389427584937438294732890574829057489200a";
		String regex = "\\d+";
		System.out.println("1." + str.matches(regex));
		
		//2.判断手机号码:
		str = "18518151175";
		regex = "1[358]\\d{9}";
		System.out.println("2." + str.matches(regex));
		
		//3.判断小数(小数点最多1次)
		str = "3324243214.343";
		regex = "\\d+\\.?\\d+";
		System.out.println("3." + str.matches(regex));
		
		//4.判断数字(可出现或不出现小数部分):
		str = "3.14";
		regex = "\\d+(\\.?\\d+)?";
		System.out.println("4." + str.matches(regex));
		
		//5.判断一个QQ号码(5-15位数字,不能以0开头):
		str = "1691530430";
		regex = "[1-9]\\d{4,14}";
		System.out.println("5." + str.matches(regex));
		
		//6.参考并修改上面第四个例子,使之满足:"22."的格式;
		str = ".3";
		regex = "\\d+(\\.?\\d*)?";
		System.out.println("6." + str.matches(regex));
		
		//7.满足:+20,-3,22.格式:
		str = "20.43274839";
		regex = "[+-]?\\d+(\\.?\\d*)?";
		System.out.println("7." + str.matches(regex));
	}
}
</span>

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值