java 捕获组与非捕获组
非捕获组:格式:(?:xxxx), 如:(?:aaa)\\w+(bbb)\\1,\\1 代表重复捕获的第一组即是(bbb)
public static void main(String[] args)
{
String str = "fooccccbarbarbarfo";
Pattern p = Pattern.compile("(?:foo)\\w+(bar)\\1\\1");
Matcher m =p.matcher(str);
if (m.find())
{
System.out.println(m.group());
System.out.println(m.group(1));
}
}
输出:
fooccccbarbarbar
bar
捕获组:格式:(xxx), 如:(aaa)\\w+(bbb)\\1,\\1 代表重复捕获的第一组即是(aaa) ,\\2代表(bbb)
public static void main(String[] args)
{
String str = "fooccccbarbarbarfo";
Pattern p = Pattern.compile("(foo)\\w+(bar)\\2\\2");
Matcher m =p.matcher(str);
if (m.find())
{
System.out.println(m.group());
System.out.println(m.group(1));
}
}
输出:
fooccccbarbarbar
foo
贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持。
属于贪婪模式的量词,也叫做匹配优先量词,包括:
“{m,n}”、“{m,}”、“?”、“*”和“+”。
在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括:
“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。
从正则语法的角度来讲,被匹配优先量词修饰的子表达式使用的就是贪婪模式,如“(Expression)+”;被忽略优先量词修饰的子表达式使用的就是非贪婪模式,如“(Expression)+?”。
对于贪婪模式,各种文档的叫法基本一致,但是对于非贪婪模式,有的叫懒惰模式或惰性模式,有的叫勉强模式,其实叫什么无所谓,只要掌握原理和用法,能够运用自如也就是了。个人习惯使用贪婪与非贪婪的叫法,所以文中都会使用这种叫法进行介绍。
最新文章
- SQL 基础语法(一)
- DNS相关知识
- php mysql支持emoji表情方案
- JAVA刷CSDN博客流量的思路
- Web服务器禁止range请求
- Android手势锁实现
- 在HCI层ACL Connection的建立
- Python核心编程-细节
- c# 范型Dictionary实用例子
- nodejs 安装 postgresql module
- github进行修改
- JAVA多线程之CountDownLatch
- 子数组的最大异或和---Trie
- 学习Acegi应用到实际项目中(4)
- rhel7.0解决:This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
- 如何防止XSRF攻击
- sbt编译spark程序提示value toDF is not a member of Seq()
- Sql Server Snapshot和mysql MVCC
- 初学nodejs之安装Express中遇到的问题: error: option `-v, --view <;engine>;&#39; argument missing
- date format 参数表
热门文章
- 13、java——常用类
- SLAM的数学基础(4):先验概率、后验概率、贝叶斯准则
- SLAM的数学基础(1):什么是方差,有什么意义?
- xshell工具使用
- springMVC-8-jackson使用
- 微信小程序云开发-云存储-上传文件(图片/视频)到云存储 精简代码
- Cannot read property &#39;data&#39; of undefined —— 小程序开发
- 【Lucas组合数定理】组合-FZU 2020
- 浅析VO、DTO、DO、PO的概念、区别和用处(八)
- 在屏幕上搜索图片并返回图片所在位置的坐标的AutoHotkey脚本源代码(类似大漠插件)