R vs sed正则表达式贪婪

edd*_*ddi 4 regex r sed

我不太明白为什么这不会产生,"test"并希望得到一个解释:

a = "blah test"
sub('^.*(test|$)', '\\1', a)
# [1] ""
Run Code Online (Sandbox Code Playgroud)

将其与sed表达式进行比较:

echo 'blah test' | sed -r 's/^.*(test|$)/\1/'
# test
echo 'blah blah' | sed -r 's/^.*(test|$)/\1/'
#
Run Code Online (Sandbox Code Playgroud)

Fwiw,以下实现了我想要的R(并且相当于上述sed结果):

sub('^.*(test)|^.*', '\\1', a)
Run Code Online (Sandbox Code Playgroud)

GSe*_*See 5

您需要标记^.*作为非贪婪

> sub('^.*?(test|$)', '\\1', "blah test")
[1] "test"
> sub('^.*?(test|$)', '\\1', "blah blah")
[1] ""
Run Code Online (Sandbox Code Playgroud)