我认为在正则表达式中,"贪婪"适用于量词而不是整个匹配。但是,我观察到
grep -E --color=auto 'a+(ab)?' <(printf "aab")
返回AAB而不是AAB。
这同样适用于 sed。 另一方面,在 pcregrep 和其他工具中,贪婪的实际上是量词。 这是 grep 的特定行为吗?
注:注:我检查了两者 grep (BSD grep( 2.5.1-FreeBSD and grep (GNU grep( 3.1
在术语匹配的描述中,POSIX 指出
对匹配序列的搜索从字符串的开头开始,并在找到与表达式匹配的第一个序列时停止,其中"first"被定义为表示"字符串中最早开始"。如果模式允许可变数量的匹配字符,因此从该点开始有多个这样的序列,则匹配最长的此类序列。
这句话清楚地回答了你的问题。字符串aab
包含两个子字符串,从与 EREa+(ab)?
匹配的相同位置开始;这些是aa
和aab
.后者最长,因此匹配。