java之正则表达式

首 ^ 匹配字符串开始的地方
尾 $ 匹配字符串结束的地方
[]如[123] 表示123
[^] 如[^123] 表示 除了123以外的所有字符
. 等价于[^\n](除换行符以外的所有任意字符)
\d 任意一个数字 [0-9]
\D 所有非数字 [^0-9]
\w 任意一个字母 数字 以及下划线 [0-9a-zA-Z]
\W 除了字母 数字 以及下划线 的任意一个(也就是说大写的是小写的补集合) [^0-9a-zA-Z]
\s 所有空白字符
\S 除了空白字符以外的 [^\s]
\b 表示单词的边界 如\bTom\b 就会匹配"Tommy Tom"中的"Tom"而不会匹配"Tommy Tom"中的"Tommy"
\B 表示[^\b]
\r 回车符
\n 换行符
\t 制表符
\f 换页符

X?
X+
X*
X{n} X出现n次
X{n,} X至少出现n次
X{n,m} X出现n到m次
| 表示或的关系 X|Y
() 分组
\n 在有分组的情况下 \1表示对分组1的引用
\ 转义字符(就是说由于正则表达式的关系 上面一些符合的意思有了变化 而转义字符就让他们变成原来的意思 如 $ 就是表示$ 而 \ 就是表示\)
String regex 正则表达式
matches方法来判断正则表达式是否正确

public static void demo5() {
		String regex = "\\s";
		System.out.println(" ".matches(regex));
		System.out.println("    ".matches(regex));//四个空格  false
		System.out.println("	".matches(regex));//一个Tab键  true
	}

正则表达式的切割

public static void demo7() {
		String s="小明.小红.小华";
		String[] arr = s.split("\\.");  //通过正则表达式切割字符串
		for(String str:arr) {
			System.out.println(str);
		}
		System.out.println(arr[0]);
	}

正则表达式的替换

String s = "wo1ai2yangruiqing";
		String regex = "\\d";
		String ss =s.replaceAll(regex, " ");  //用正则表达式替换
		System.out.println(ss);  //结果为wo ai yangruiqing
		
		
		String s2=s.replace('1', ' '); //结果为wo ai2yangruiqing
		String s3=s2.replace('2', ' ');//结果为wo ai yangruiqing
		System.out.println(s2);
		
//		两者等价

正则表达式的切割
1.叠词

public static void demo11() {
		//		 叠词切割
				 String s="sdqqfgkkkhjppppkl";
				 String regex3="(.)\\1+";
		//		 String regex3="(.)\\1*";   错的  因为至少要出现1次以上
				 String[] arr = s.split(regex3);
				 for(int i=0;i<arr.length;i++) {
					 System.out.println(arr[i]);
				 }
	}

结巴

//"我我..我...我.要...要.要.学学学...学编编..编.程..程程"
		//改成"我要学编程"
		String s="我我..我...我.要...要.要.学学学...学编编..编.程..程程";
		String regex="\\.+";
		String s2=s.replaceAll(regex,"");
		System.out.println(s2);//我我我我要要要学学学学编编编程程程
		String s3=s2.replaceAll("(.)\\1+", "$1");//代表第一组里的内容
		System.out.println(s3);

Pattern和Matcher的配合使用

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public static void demo13() {
		Pattern p = Pattern.compile("a*b");  //获取正则表达式
		Matcher m = p.matcher("aaaaab");     //获取匹配器
		boolean b = m.matches();         	 //判断能否匹配
		System.out.println(b);
		//两者等价
		System.out.println("aaaaab".matches("a*b"));
	}
public static void demo14() {
		//获取字符串的号码
		String regex="1[3578]\\d{9}";     //手机号码的正则表达式
//		String regex2="1[3578][0-9]{9}"; 
		Pattern p = Pattern.compile(regex);  //获取正则表达式  由于Pattern的构造器是私有的 所以要先获取Pattern的对象 才能用其中的静态方法
		Matcher m = p.matcher("我的手机号码15349842925,原来的号码15184776282,妈妈的号码15184774108");     //获取匹配器
		boolean b = m.matches();         	 //判断能否匹配
		
		System.out.println(b);  //当然匹配不了,不过可以找呀 

		
		while(m.find()) {
			System.out.println(m.group());
		}
		
		
		boolean b2=m.find();    //找完了
		System.out.println(b2);    //false
	}

demo14 的打印结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑瞳丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值