14.第十三节demo7-----大佬使用的正则表达式,作为菜鸟力求看明白,内容求大佬指正

博主希望路过的大佬对文中关于正则表达式内容里错误或不准确的地方进行指正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.zzh.day2;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
 * img/SpecialConstructs.png
 * */
public class demo7 {
	public static void main(String[] args) {
//		String string = "444a66ba";
		String string = "456a78ba";
		/*
		 * 解释一下:这里(?=a)应该是不捕获等于a的这个字符,然而在a78这个位置,已经可以匹配到a这个字符,已经属于能匹配该正则表达式的字符串
		 * 故a不捕获,然而又从不捕获但属于匹配位置的地方开始匹配三个字符,即是a78
		 * */
		Pattern p1 = Pattern.compile("(?=a).{3}");//不捕获的意思
		Matcher m1 = p1.matcher(string);
		if (m1.find()) {
			System.out.println("m1  "+m1.group());//输出a78
		}
		
		
		/*
		 * 解释一下,没什么好解释的,就是不捕获a,并且下一次匹配的位置从这个a开始,,所以是444 66b
		 * 若正则表达式改成.{4}(?=a),,则匹配到的字符串就是a66b,这样,,就更明显了
		 * */
		Pattern p2 = Pattern.compile(".{3}(?=a)");
		Matcher m2 = p2.matcher(string);
		while(m2.find()){
			System.out.println("m2  "+m2.group());//输出456 78b
		}
		
		/*456a78ba
		 * 解释一下:顾名思义,就是匹配不是a的,从头开始,56a7,7不是a,8ba最后什么也没有,也不是a,故匹配到56a 8ba
		 * */
		Pattern p3 = Pattern.compile(".{3}(?!a)");
		Matcher m3 = p3.matcher(string);
		while(m3.find()){
			System.out.println("m3  "+m3.group());//56a 8ba
		}
		
		/*456a78ba
		 * 解释一下:前面不是a
		 * 开始,4,不是a,匹配,然后这个4不捕获,从4开始找3个字符,即是456
		 * 继续,a,不匹配,后移,7,不是a,匹配,不捕获,从7开始找3个字符,即是78b
		 * */
		Pattern p4 = Pattern.compile("(?!a).{3}");
		Matcher m4 = p4.matcher(string);
		while(m4.find()){
			System.out.println("m4  "+m4.group());//456 78b
		}
		
		/*a456a78ba
		 * 解释一下:对于每个匹配的片段的方式来讲,和.{3}(?!a)是反过来的,
		 * 
		 * */
		Pattern p5 = Pattern.compile(".{3}(?<!a)");
		Matcher m5 = p5.matcher(string);
		while(m5.find()){
			System.out.println("m5  "+m5.group());//456 a78
		}
		
		/*
		 * 解释一下:
		 * */
		Pattern p6 = Pattern.compile("(?<!a).{3}");
		Matcher m6 = p6.matcher(string);
		while(m6.find()){
			System.out.println("m6  "+m6.group());//456 a78
		}
		
		
		/*456a78ba
		 * 解释一下:
		 * */
		Pattern p7 = Pattern.compile("(?<=a).{3}");
		Matcher m7 = p7.matcher(string);
		while(m7.find()){
			System.out.println("m7  "+m7.group());//78b
		}
		
		/*456a78ba
		 * 解释一下:可以这么想,456a是匹配这个正则表达式的,然而
		 * */
		Pattern p8 = Pattern.compile(".{3}(?<=a)");
		Matcher m8 = p8.matcher(string);
		while(m8.find()){
			System.out.println("m8  "+m8.group());//56a 8ba
		}
		
		/*back references
		 * 向前引用\\1 代表第一个组(没错,是第一个组,\\2表示第二组)捕捉之后的那个字符串,相同才是true
		 * */
		Pattern p9 = Pattern.compile("(\\d\\d)\\1([a-z][a-z])\\2");
		String s = "1212abab";
		Matcher m9 = p9.matcher(s);
		System.out.println(m9.matches());
		
		//不区分大小写
		Pattern p10 = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
		Pattern p10_ = Pattern.compile("(?i)(java)");//(?i)的意义在SpecialConstructs.png
		//以上两个正则表达式的匹配的意义是相同的
		System.out.println(p10.matcher("JAVA").matches());
		System.out.println(p10_.matcher("JAVA").matches());
		
	}
}

输出结果:

m1  a78
m2  456
m2  78b
m3  56a
m3  8ba
m4  456
m4  78b
m5  456
m5  a78
m6  456
m6  a78
m7  78b
m8  56a
m8  8ba
true
true
true

在这里插入图片描述
路过的大佬,这篇文里面错误或者不准确的地方,跪求指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值