今天研究了正则表达式的贪婪算法,量词的贪婪性是在量词的三大算法(贪婪,惰性,支配)中最实用也是最难理解的一种算法,下面我们举例将它说清楚。
定义:
A greedy quantifier starts by looking at the entire string for a match. If no match is found, it eliminates the last character in the string and tries again. If a match is still not found, the last character is again discarded and the process repeats until a match is found or the string is left with no characters. All the quantifiers discussed to this point have been greedy.
实例:
-
var str1 = "abbbaabbbaaabbb1234";
var reg1 = /.*bbb/g;
document.write(str1.match(reg1));
document.write("<br/>");
结果:abbbaabbbaaabbb
-
var str2 = "zewsdf skyyy flyok156sky skyy skyyyy";
var reg2 = /sky*/g;
document.write(str2.match(reg2));
document.write("<br/>");
结果:skyyy,sky,skyy,skyyyy
-
var str3 = "yyyyyyyyyyyyy";
var reg3 = /yy*/g;
document.write(str3.match(reg3));
结果:yyyyyyyyyyyyy
-
var str4 = "yyyyyykyyyyy";
var reg4 = /yy*/g;
document.write(str4.match(reg4));
结果:yyyyyy,yyyyy
总结:
大家仔细观察上面的例子和输出结果不难看出,贪婪算法是这样的:首先会按照正则表达式制定的匹配顺序进行匹配直到发现一个量词,这个时候贪婪算法会先取整个串看是否符合包括量词在内的整个正则表达式的匹配情况,如果满足砍掉匹配上的子串,在剩下的子串中再找是否有符合的情况,如有取出,没有结束。一直递归下去,直到找到所有的匹配情况或没有任何匹配的时候结束匹配。
分享到:
相关推荐
1. **语法兼容性**:如描述所述,PCRE库的正则表达式语法与Perl语言高度兼容,这意味着开发者可以利用Perl中广泛使用的正则表达式语法,如贪婪和非贪婪量词、分支选择、反向引用等。 2. **Unicode支持**:PCRE库...
正则表达式是一种强大的文本处理工具,用于在字符串中匹配、查找、替换或提取特定模式。它是编程语言中不可或缺的一部分,被广泛应用于数据验证、文本分析、搜索与替换等场景。"正则表达式详细文档CHM版"包含了丰富...
总的来说,"正则表达式学习资料整理"中的四则运算正则表达式部分,旨在帮助学习者掌握如何运用正则表达式来处理数学运算符,以及理解正则表达式的基本语法和原理,从而在实际编程中更加得心应手。通过深入学习和实践...
通过阅读《精通正则表达式》(第3版)(影印版),你将能够深入了解这些概念,学会编写复杂的正则表达式,解决实际工作中的文本处理问题,提升编程技能。无论你是初学者还是经验丰富的开发者,这本书都会为你提供...
- **匹配算法**:不同的正则表达式引擎可能采用不同的匹配策略,如DFA(确定有限状态自动机)和NFA(非确定有限状态自动机)。 6. **在编程语言中的应用** - **Python的re模块**:提供了正则表达式的全面支持,...
Deelx库的设计目标是提供与Perl和PCRE(Perl Compatible Regular Expressions)兼容的正则表达式引擎,它支持多种正则表达式语法,包括贪婪与非贪婪量词、反向引用、预查等高级特性。通过Deelx,开发者可以在C++程序...
此外,书中还详细探讨了正则表达式的效率问题,包括如何避免回溯和优化匹配算法。这对于处理大量数据或者编写性能敏感的代码来说,是不可或缺的知识。 书中的书签功能使得读者可以轻松地回到之前学习过的重点内容,...
- **性能优化**:通过算法改进或代码优化提高正则表达式匹配速度,减少内存消耗。 - **新功能添加**:增加了新的正则表达式功能,如非贪婪匹配、环视等高级特性。 - **错误处理**:完善了错误检测和处理机制,提供更...
在这个解析器中,你可以看到如何手动实现这一过程,包括识别和处理各种正则表达式元字符、量词、字符类等。 1. **元字符**:正则表达式中的一些特殊字符,如`.`代表任意字符,`^`表示行首,`$`表示行尾,`\`用于...
8. **回溯与贪婪与非贪婪**:默认情况下,正则表达式采用贪婪匹配,尽可能多的匹配字符。非贪婪匹配可以在量词后加上 `?`,如 `.*?`。 9. **测试工具功能**:一个优秀的正则表达式测试工具应具备以下功能: - ...
1. **回溯**:正则表达式引擎通常采用回溯算法来寻找最合适的匹配项。当匹配失败时,它会尝试不同的方式重新匹配,直到找到一个完整的匹配或者完全匹配失败。 2. **贪婪与懒惰匹配**:默认情况下,某些量词如`*`、...
在MingW环境中,PCRE(Perl Compatible Regular Expressions)是一个非常重要的库,它提供了一个强大的正则表达式处理功能。 PCRE8.12是PCRE库的一个特定版本,它支持Perl 5风格的正则表达式。这个库是高度优化的,...
本文将围绕“正则表达式的烦恼”这一主题,探讨正则表达式的基本概念、常用语法以及在实际应用中可能遇到的问题。 首先,我们要理解正则表达式的核心概念。一个正则表达式是由字符、元字符和量词组成的模式,它可以...
总之,Java正则表达式NFA图形算法是Java开发中处理字符串模式匹配的重要机制,它结合了自动机理论和正则表达式语法,为开发者提供了强大的文本处理能力。深入理解和掌握这一算法,能够帮助开发者编写出更加高效和...
正则表达式中的特殊操作,如贪婪与非贪婪匹配("+"和"*?"),量词预查("{n,m}"),分组("(...)")等,需要在源码中以特殊方式处理。例如,分组可能需要维护一个堆栈来记录捕获的子串。 7. 扩展功能 除了基础的...
2. stlpmt45.dll:这可能是基于STL(标准模板库)的某版本的库文件,可能与正则表达式的容器或算法有关。 3. boost_regex_bcb6_mdi.dll:Boost库是一个广泛使用的C++库,其中的`boost_regex`模块提供了正则表达式...
- **匹配算法**:不同的编程语言和库可能使用不同的正则表达式引擎,如DFA(确定有限自动机)和NFA(非确定有限自动机)。 - **回溯**:NFA引擎在处理复杂模式时可能会进行回溯,影响性能。 7. **在各种语言中的...
同时,理解和运用正则表达式的模式匹配原理,如KMP算法或DFA/NFA模型,能够帮助我们更好地优化和调试正则表达式。 总之,“正则表达式测试工具”是一个实用的辅助软件,可以帮助IT专业人士和爱好者在日常工作中更...
在这个“微型正则表达式源码实现【修改版2】”中,我们可能看到的是一个简化版的正则表达式引擎的实现,它可能包含了一些基本的正则表达式功能,比如匹配基本的字符类、量词和分组等。 源码文件`RegularExpression....