正则表达式(Java版)

一、概念
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,提高代码的简洁读。正则表达式的英文为Regular Expression,缩写为regex,RE等。

二、基础规则

  1. 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。

  2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。

  3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。

4.^在中括号内和在外含义不同,在外如 ^7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符,表示相反(包括数字,特殊字符),如 [^abc] 表示匹配出去abc之外的其他任一字符。

  1. .表示匹配任意的字符。

  2. \d表示数字。

  3. \D表示非数字。

  4. \s匹配任何空白字符,与[ \t\n\r\x\f]等效。

  5. \S表示由非空字符组成,[^\s]。

  6. \w表示字母、数字、下划线,与[a-zA-Z0-9_]等效。

  7. \W表示不是由字母、数字、下划线组成。(一般大小的正则都是小写的反义)

  8. ?: 表示出现0次或1次。

  9. +表示出现1次或多次。

  10. *表示出现0次、1次或多次。

  11. {n}表示恰好出现n次。

  12. {n,m}表示出现n~m次。

  13. {n,}表示出现n次或n次以上。

  14. XY表示X后面跟着Y,这里X和Y分别是正则表达式的一部分。

  15. X|Y表示X或Y,比如"food|f"匹配的是foo(d或f),而"(food)|f"匹配的是food或f。

  16. (X)子表达式,将X看做是一个整体。也称为捕获组,捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:((A)(B©)),(A),(B©),©

三、正则表达式在Java中的使用
在java中调用正则表达式的类是java.util.regex.Matcher和java.util.regex.Pattern。
一般正则表达式的使用类型有三种:匹配、替换、分割,例子如下。

1.简单匹配

public class RegexExample1 {
/*
 * 实现方式1,匹配一个数字。
 * 实现方式2, 匹配1个到3个字母,大小写不限,包括1和3个。
 * 实现方式3(此种实现方式最快), 匹配11位的电话号码,匹配规则:第一个数字是1,第二个数字是2,3,7,8中任一个,后面9位数字中不包含4。
 */
	public static void main(String[] args) {
		String str1 = "1";
		String str2 = "hl";
	    String str3 = "15869888888";
		//正则表达式
		String regex1 = "[0-9]";
		String regex2 = "[a-zA-Z]{1,3}";
		String regex3 = "1[2378][0-35-9]{9}";
		 //将给定的正则表达式编译为模式。 如果匹配需求较多,且需用同相同的regex去匹配,就可将这句写到静态模块里面,用的时候直接使用实例p
		Pattern p = Pattern.compile(regex3);
		 //创建一个匹配器,匹配给定的输入与此模式。
		Matcher m = p.matcher(str3);
		//返回匹配的结果,匹配成功就返回true,失败就返回false,此次匹配返回true。
		boolean flag = Pattern.matches(regex1, str1);
		System.out.println(flag);
		System.out.println(str2.matches(regex2));
		System.out.println(flag);
		}
}

2.替换

public class RegexExample1 {
/*
 * 通过replaceAll方法将字符串中指定的内容替换为想要的内容
 */
	public static void main(String[] args) {
		//要匹配的字符
		String str = "55ab786s4f1512s";
	    //正则表达式
		String regex = "[a-zA-Z]+";
		//正则表达式
		String regex2 = "\\d+";
		//将字符串中英文字母替换为#符号
		System.out.println(str.replaceAll(regex, "#"));
		//将字符串中单个数字或者连续的数字替换为!
		System.out.println(str.replaceAll(regex2,"!"));
	}
}

3.替换

public class RegexExample1 {
/*
 * 通过大写字母来分割字符串,其中大写字母会被去掉,输出结果 hello world aa bb 
 */
	public static void main(String[] args) {
		String str = "ShelloSworldSaaSbb";
		String regex = "[A-Z]";
		String[] arr = str.split(regex);
		for (String s: arr) {
			System.out.print(s +" ");
		}
	}
}

转载自:https://www.jianshu.com/p/3c076c6b2dc8 ,感谢整理和分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值