我认为在正则表达式中,“贪婪”适用于量词而不是整个匹配。然而,我观察到
grep -E --color=auto 'a+(ab)?' <(printf "aab")
returns aab而不是aab.
这同样适用于 sed。
另一方面,在 pcregrep 和其他工具中,量词确实是贪婪的。
这是 grep 的特定行为吗?
注意:我检查了两个
grep (BSD grep) 2.5.1-FreeBSD 和 grep (GNU grep) 3.1
In 术语的描述matched https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_01_02,POSIX 规定
对匹配序列的搜索从字符串的开头开始,并在找到与表达式匹配的第一个序列时停止,其中“first”被定义为表示“在字符串中最早开始”。如果模式允许可变数量的匹配字符,因此从该点开始有多个这样的序列,则匹配最长的这样的序列。
这个说法清楚地回答了你的问题。字符串aab
包含两个从与 ERE 匹配的相同位置开始的子字符串a+(ab)?
;这些都是aa
and aab
。后者最长,因此匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)