格雷普的贪婪行为



我认为在正则表达式中,"贪婪"适用于量词而不是整个匹配。但是,我观察到

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)?匹配的相同位置开始;这些是aaaab.后者最长,因此匹配。

最新更新