erc*_*rch 5 command-line grep regular-expression
我正在自学正则表达式,我陷入了“贪婪”与“懒惰”重复的困境。
到目前为止我发现的是
我发现的大多数文章都涉及 a) 在编程语言中使用它,而我被困在这里grep和egrep或 b) 用于grep -P激活Perl Mode;但由于我对 Perl 一无所知,这对我来说并不是很有帮助。
我的理解问题:我来到了这个大锤方法:
?这就是我通过 HTML 代码的示例和实验得出的结论,在那里我得到了一些但不是压倒性的结果。
如果有人能告诉我我的总结是否以及在哪里遗漏了一些要点,我将不胜感激。
这不是最短的比赛,只是一场短暂的比赛。贪婪模式尝试找到最后一个可能的匹配,惰性模式尝试找到第一个可能的匹配。但第一个可能的匹配不一定是最短的。
获取输入字符串foobarbaz和正则表达式o.*a(贪婪)或o.*?a(惰性)。
此输入字符串中可能的最短匹配项是oba。
然而,正则表达式从左到右查找匹配项,因此会找到中的o第一个。如果模式的其余部分产生匹配,则它就保留在那里。ofoobarbaz
在第一个之后o,.*(贪婪)吃掉obarbaz(整个字符串),然后回溯以匹配模式的其余部分(a)。因此它找到了最后一个 abaz并最终匹配oobarba。
在第一个之后o,.*?(惰性)不会吃掉整个字符串,而是查找模式其余部分的第一次出现。所以首先它看到第二个o不匹配的a,然后它看到b不匹配的a,然后它看到a匹配的a,因为它是懒惰的,所以它就停止了。(结果是ooba,但不是oba)
因此,虽然它不是最短的版本,但它比贪婪版本更短。
| 归档时间: |
|
| 查看次数: |
9618 次 |
| 最近记录: |