正则表达式 捕获组,向前引用,零宽度断言,贪婪量词,惰性量词以及支配量词

本文深入探讨了正则表达式中的捕获组应用与向前引用技巧,通过实例展示了如何使用捕获组引用和向前引用来解决字符串匹配问题。

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

原来写过一篇正则表达式的文章
http://hi.baidu.com/kabike/item/305cb3e591bbf4b52f140ba7
后来又读了一遍《精通正则表达式》,感觉有了新的认识.

捕获组
正则表达式中的括号相当于一个分组,比如下面这个正则表达式,就把字符串分成了"_"分割的三个分组,
然后可以利用$1引用第一个分组,$3引用第三个分组
Java代码 复制代码  收藏代码
  1. Pattern p = Pattern.compile("([^_]+)_(\\d+)_([^_]+)");   
  2. String src1 = "孙燕姿_20091103_遇见.mp3";   
  3. Matcher m = p.matcher(src1);   
  4. System.out.println(m.replaceAll("$1_$3"));   
  5. //output 孙燕姿_遇见.mp3  
		Pattern p = Pattern.compile("([^_]+)_(\\d+)_([^_]+)");
		String src1 = "孙燕姿_20091103_遇见.mp3";
		Matcher m = p.matcher(src1);
		System.out.println(m.replaceAll("$1_$3"));
		//output 孙燕姿_遇见.mp3


向前引用
假设想匹配字符串中的"hello hello"这样的字串是很容易的,但是想匹配所有的这样的重复字符串呢(比如 "aaa aaa"和"www www")?
可以利用向前引用,即寻找已经匹配的捕获组.
比如下面这个正则表达式,寻找这样的匹配模式:多个字母(形成了捕获组1),一个空格,捕获组1
Java代码 复制代码  收藏代码
  1. Pattern p = Pattern.compile("(\\w+)\\s\\1");   
  2. String src = "I always make make some mistakes when when writting.";   
  3. Matcher m = p.matcher(src);   
  4. while (m.find()) {   
  5.     System.out.println(m.group());   
  6. }   
  7. //output make make   
  8.          when when  
		Pattern p = Pattern.compile("(\\w+)\\s\\1");
		String src = "I always make make some mistakes when when writting.";
		Matcher m = p.matcher(src);
		while (m.find()) {
			System.out.println(m.group());
		}
		//output make make
		 		 when when


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值