正则表达式小结

1.Matcher 中的带参数的reset方法可以重复使用一个matcher ,提高效率。

2.在匹配模式前加?是懒惰模式,有的时候很有用

static Pattern pattern = Pattern.compile("(?<=角色{1,200})(?::.+?:)(\\d+)");
	static String str = "角色:管理员:123,员工:张三:222,角色:经营部成员:1234,员工:汪宁:333";

	public static void test(){
		Matcher matcher = pattern.matcher(str);
		while(matcher.find()){
			System.out.println(matcher.start());
			System.out.println(matcher.end());
			System.out.println(matcher.group(1));
			System.out.println("---------------------");
		}
	}

这里我要匹配123和1234 如果
(?::.+?:) 换成 (?::.+:) 就是贪婪模式 .+会尽可能匹配多的字符,这样的话
我得到的结果就永远只有最后一个。

 3.(?:)这样的话这个括号的组不会被捕获

4.零度断言

(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置
(?!exp)匹配后面跟的不是exp的位置
(?<!exp)

匹配前面不是exp的位置

 

 

 5.appendReplacement

	public static void cc(){
		Matcher matcher = Pattern.compile("\\D+", Pattern.DOTALL).matcher("a1b3c4");
		StringBuffer str = new StringBuffer();
		while(matcher.find()){
			 matcher.appendReplacement(str, matcher.group()+"#");
			 System.out.println(matcher.group());
		}
		matcher.appendTail(str);
		System.out.println(str.toString());
	}

 这里结果会变成a#1b#3c#4
这是一种比较高级的替换,比replace方法要更灵活。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值