【JavaSE】Java正则表达式

一.正则表达式的构造

1.特殊符号
符号说明
[]中括号括起来的部分只表示一个字符,中括号中的内容表示可选范围
-表示一个包含起始和结束的范围,在中括号内使用
^用在中括号内表示排除项 ,用在中括号外表示匹配开始位置
$匹配结束位置
()用于分组,并提高优先级
\转义特殊字符,也可以跟数字搭配使用捕获分组
|表示或者
2.单字符
规则说明
[abc]a或b或c
[^abc]匹配除了a丶b丶c以外的字符
[a-z]匹配a-z之间的字符,即所有小写字母
[A-Z]匹配A-Z之间的字符,即所有大写字母
[A-z]匹配A-z之间的字符,即所有字母
[0-9]匹配0-9之间的字符,即所有单个数字
3.元字符
规则说明
.所有字符(行结束符除外,慎用)
\w匹配单词字符(字母丶数字丶下划线)
\W匹配非单词字符
\d匹配数字
\D匹配非数字
\s匹配空白字符
\S匹配非空白字符
\b匹配单词边界
\B匹配非单词边界
4.量词
规则说明
?一个或零个
*零个或多个
+一个或多个
{X}固定X个
{X,}大于等于X个
{X,Y}X个到Y个
4.嵌入式表达式
规则说明
(?i)在其后面的字母忽略大小写
(?m)多行匹配,一般放在最前面,需要配合^或$使用,表示每行内容都用正则表达式去匹配
(?s)在其后面使用.可以匹配所有字符,包括行结束符
//等同[Aa][Ba][Cc]\d[Dd]
(?i)AbC\dD    

//对每行内容都进行匹配^\w\d$
//如果^和$都不加,(?m)加不加结果都一样,因为find()匹配的是子项,跟换行无关
//使用matches()方法(?m)无效
(?m)^\w\d$    

//这里.可以是任意字符,包括行结束符(\r\n等)
(?s).

二.Java使用正则表达式

1.字符串类
  • 校验字符串是否匹配正则表达式public boolean matches(String regex)
    • matches方法匹配的地方包括的开头和结尾,等同于在正则表达式头尾分别增加了^和$
		String regex = "[abc]";
		String str1 = "b";
		String str2="bc";
		//输出true
		System.out.println(str1.matches(regex));
		//输出false
		System.out.println(str2.matches(regex));
  • 根据正则表达式进行替换public String replaceAll(String regex,String replacement)
    • 从左到右匹配,匹配成功则替换,剩下未匹配部分继续匹配(已替换或已匹配部分不再进行后面的匹配)
		String str="aaabbb";
		
		String str2=str.replaceAll("ab", "c");		
		//输出aacbb
		System.out.println(str2);
		
		String str3=str.replaceAll("aa","dd");
		//输出ddabbb
		System.out.println(str3);
  • 使用正则表达式对字符串分割成数组public String[] split(String regex)
		String str="我...是一名..程..序...员";
		//使用正则表达式对字符串分割成数组
		String[] arr=str.split("\\.{2,3}");
		for (int i = 0; i < arr.length; i++) {
			//输出:我是一名程序员
			System.out.print(arr[i]);
		}
2.Pattern类
  • 将指定正则表达式编译到模式中public static Pattern compile(String regex)

  • 根据指定字符串创建匹配器public Matcher matcher(CharSequence input)

  • 编译指定正则表达式并尝试匹配字符串public static boolean matches(String regex,CharSequence input)

  • 匹配的地方包括的开头和结尾,等同于在正则表达式头尾分别增加了^和$

		//等同于String类的matches方法
		boolean b1= Pattern.matches("[1-5]", "3");
		boolean b2= Pattern.matches("[1-5]", "34");
		System.out.println(b1);   //true
		System.out.println(b2);   //false
3.Matcher类
  • 尝试匹配public boolean matches()
  • 匹配的地方包括的开头和结尾,等同于在正则表达式头尾分别增加了^和$
  • 查找匹配,匹配成功则把指针往后移 public boolean find()
  • 返回匹配器最近一次匹配的值 public String group()
  • 需要先调用find(),group()才能获取值
		String str="3a2b1c";
		String regex="[0-9]";
		//1.把正则表达式编译成模式
		Pattern p=Pattern.compile(regex);
		//2.根据被匹配的字符串创建匹配器
		Matcher m=p.matcher(str);
		//3.循环查找匹配
		while(m.find()){
			//4.返回上一次匹配成功的值
			String r=m.group();
			System.out.println(r);
		}
		//输出:321

三.分组

1.正则表达式
  • 使用小括号括起来的为一组
  • 从左边小括号(开始计算组号,从1开始
  • 使用\组号 获取指定组的匹配值并在正则表达式中使用(等同于复制值)
//等同于AABBCCABC
(A)\\1(B)\\2(C)\\3\\1\\2\\3
2.java获取分组值
  • 根据指定组号返回匹配器最近一次匹配的值 public String group(int group)
  • 当参数不填时,默认为0,整个表达式为一组,组号为0,即获取的是匹配到的整个表达式的值
  • 其他组的编号从1开始,即第一个()编号为1,第二个()编号为2…
		String regex="([A-z])\\1([A-z])\\2([A-z])\\3\\1\\2\\3";
		String str="AABBCCABC";
		//把正则表达式编译成模式
		Pattern p=Pattern.compile(regex);
		//根据被匹配的字符串创建匹配器
		Matcher m=p.matcher(str);
		while(m.find()){
		    //输出整个匹配结果:AABBCCABC
			System.out.println(m.group(0));
			//输出A
			System.out.println(m.group(1));
			//输出B
			System.out.println(m.group(2));
			//输出C
			System.out.println(m.group(3));
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值