关于java正则表达式贪婪模式和勉强模式的研究
来源:互联网 发布:什么是网络pos机 编辑:程序博客网 时间:2024/05/16 08:30
解释:
greedy :贪婪
reluctant:勉强,不情愿
java 正则表达式默认用的是greedy贪婪匹配模式既是这种类型(.*)的最长匹配,如果需要最短匹配则改为(.*?)即是勉强匹配模式。
原理分析:
如果是贪婪匹配模式,正则表达式引擎会一直匹配到字符串最后,当匹配为false时,通过
回溯的方式,倒退找到倒数第一个匹配位置,返回匹配结果
如果是勉强匹配模式,正则表达式引擎会匹配到符合pattern的末尾位置那个字符,然后再往后走一步,发现匹配为false,又回溯到找到回退的最近一个匹配为true的位置,返回结果。
看代码:
例一:
@Testpublic void test51(){String str = "aaa\"bbb\"ccc\"ddd\"eee";System.out.println(str);str = str.replaceAll("\"(.*)\"", "@");System.out.println(str);}
输出:
aaa"bbb"ccc"ddd"eee
aaa@eee
例二:
@Testpublic void test52(){String str = "aaa\"bbb\"ccc\"ddd\"eee";System.out.println(str);str = str.replaceAll("\"(.*?)\"", "@");System.out.println(str);}
输出:
aaa"bbb"ccc"ddd"eee
aaa@ccc@eee
例三:
@Testpublic void test7(){// Greedy quantifiers String match = find("A.*c", "AbcAbc"); // AbcAbc System.out.println(match); match = find("A.+", "AbcAbc"); // AbcAbc System.out.println(match); // Nongreedy quantifiers match = find("A.*?c", "AbcAbc"); // Abc System.out.println(match); match = find("A.+?", "AbcAbc"); // Ab System.out.println(match);}public String find(String patternStr, CharSequence input) { Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(input); if (matcher.find()) { return matcher.group(); } return null; }
- 关于java正则表达式贪婪模式和勉强模式的研究
- JAVA 正则表达式的三种模式: 贪婪, 勉强和占有的讨论
- [疯狂Java]正则表达式:Java正则表达式语法、贪婪模式/勉强模式
- Java-----正则表达式匹配模式[贪婪模式、勉强模式、占有模式]
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- Java正则表达式匹配模式[贪婪型、勉强型、占有型]
- java正则表达式匹配模式[贪婪型、勉强型、占有型]
- Java正则表达式匹配模式[贪婪型、勉强型、占有型]
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- 正则表达式的三种模式【贪婪、勉强、侵占】的分析
- Python正则表达式的贪婪模式和非贪婪模式
- 关于正则表达式的贪婪与非贪婪模式
- 关于正则表达式的贪婪与非贪婪模式
- Java正则表达式学习 贪婪 勉强 侵占
- Java 正则表达式中量词的贪婪型,勉强型和占有型讲解
- 正则表达式中量词贪婪型和勉强型的讨论(Java语言描述)
- 正则表达式贪婪模式
- 正则表达式贪婪模式
- 标记化结构初始化语法(C语言)
- hdu 2897 邂逅明下 博弈
- Matlab基本操作函数-angle函数
- hibernate left join 多表连接查询不到结果,但生成的查询语句在数据库可以查询
- 【CQOI 2006】 简单题
- 关于java正则表达式贪婪模式和勉强模式的研究
- uboot_mt7620对SPI flash操作的分析
- Myeclipse中安装Aptana插件操作和步骤
- dowhile的妙用
- Codeforces Round #208 (Div. 2)
- PBSQLScipt 数据库管理工具V3.0
- poj——2063——Investment(dp)
- 学习笔记(一)之示例程序:计算每年的最高温度MaxTemperature
- LeetCode:Candy