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