greedy、reluctant和possessive量词
来源:互联网 发布:mac系统下面的图标 编辑:程序博客网 时间:2024/04/29 08:04
greedy、reluctant和possessive量词的区别
greedy、reluctant和possessive量词之间有微妙的区别。
greedy量词被看作“贪婪的”,因为它们在试图搜索第一个匹配之前读完(或者说吃掉)整个输入字符串。如果第一个匹配尝试(整个输入字符串)失败,匹配器就会在输入字符串中后退一个字符并且再次尝试,重复这个过程,直到找到匹配或者没有更多剩下的字符可以后退为止。根据表达式中使用的量词,它最后试图匹配的内容是1个或者0个字符。
但是,reluctant量词采取相反的方式:它们从输入字符串的开头开始,然后逐步地一次读取一个字符搜索匹配。它们最后试图匹配的内容是整个输入字符串。
最后,possessive量词总是读完整个输入字符串,尝试一次(而且只有一次)匹配。和greedy量词不同,possessive从不后退,即使这样做能允许整体匹配成功。
为了演示,我们分析输入字符串xfooxxxxxxfoo:
Enter your regex: .*foo
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending atindex 13.
Enter your regex: .*?foo
Enter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index4.
I found the text "xxxxxxfoo" starting at index 4 and ending atindex 13.
Enter your regex: .*+foo //
Enter input string to search: xfooxxxxxxfoo
No match found.
第一个例子使用greedy量词.*搜索“任何内容”零次或者多次,后面是字母f、o、o。因为是greedy量词,所以表达式的.*部分首先读完整个字符串。这样,整个表达式不会成功,因为最后三个字母(“f”“o”“o”)已经被消耗了。所以匹配器缓慢地一次后退一个字母,一直后退到最右侧出现“foo”为止,这里匹配成功并且搜索停止。
但是第二个例子使用的量词是reluctant量词,所以它首先消耗“无内容”。因为“foo”没有出现在字符串的开头,所以迫使它消耗掉第一个字母(x),这样就在索引0和4的位置触发第一个匹配。我们的测试示例继续处理,直到输入字符串耗尽为止。它在索引4和13找到了另一个匹配。
第三个例子找不到匹配,因为是possessive量词。这种情况下,.*+消耗整个输入字符串,在表达式的结尾没有剩下满足“foo”的内容。possessive量词用于处理所有内容,但是从不后退的情况;在没有立即发现匹配的情况下,它的性能优于功能相同的greedy量词。
- greedy、reluctant和possessive量词
- greedy、reluctant和possessive量词的区别
- greedy、reluctant和possessive量词的区别
- [转载]正则表达式 的greedy、reluctant和possessive量词
- Greedy Reluctant Possessive区别
- Greedy Reluctant Possessive 正则表达式
- Differences Among Greedy, Reluctant, and Possessive Quantifiers
- 正则表达式:Greedy、Reluctant、Possessive 区别
- Greedy quantifiers, Reluctant quantifiers, Possessive quantifiers
- Java正则中的Greedy、Reluctant 、Possessive
- Java正则中的Greedy、Reluctant 、Possessive qualifier
- Greedy vs. Reluctant vs. Possessive Quantifiers
- Greedy vs. Reluctant vs. Possessive Quantifiers
- Java中的正则表达式中Greedy,Reluctant和Possessive数量词的区别
- Java正则表达中Greedy Reluctant Possessive 的区别
- 正则表达式Greedy、Reluctant、Possessive三种策略的区别
- java 正则表达式Greedy、Reluctant、Possessive的理解
- Java正则表达中Greedy Reluctant Possessive 的区别
- ubuntu更新的几种命令
- Java的GC机制
- 记录一个SQL Server 2005的存储过程,循环修改数据例子
- SVN上检出项目
- 代码重构方向原则指导
- greedy、reluctant和possessive量词
- B. Depression
- 不能返回局部变量的引用
- 网站的开发模式
- OpenStack H版发布
- glob模块
- 安卓中读写SD卡文件
- 网上商城项目
- 开源IaaS云平台的分析与比较