【发布时间】:2020-03-26 23:56:39
【问题描述】:
我认为在正则表达式中,“贪婪”适用于量词而不是整体匹配。但是,我观察到
grep -E --color=auto 'a+(ab)?' <(printf "aab")
返回 aab 而不是 aab。
这同样适用于 sed。 另一方面,在 pcregrep 等工具中,真正贪婪的是量词。 这是 grep 的特定行为吗?
注意我检查了两个 grep (BSD grep) 2.5.1-FreeBSD 和 grep (GNU grep) 3.1
【问题讨论】:
-
好的,我现在更好地理解了这个问题,
echo 'aab' | grep -P 'a+(ab)?'突出显示aa而echo 'aab' | grep -E 'a+(ab)?'突出显示aab意味着它是可选的ab匹配,即使它不是必需的.. 我认为这是因为最长匹配获胜.. 例如,echo 'aab' | grep -E 'a+|a+b'突出显示aab因为这是最长的匹配,而echo 'aab' | grep -P 'a+|a+b'突出显示aa因为在 PCRE 中,从相同位置开始的匹配从左到右交替优先跨度> -
是的,我也在某个地方读到过最长匹配。但它与“贪婪的量词”相冲突。我没有意识到这是 POSIX 正则表达式和其他一些不同的另一个点。
标签: regex grep regex-greedy posix-ere