上perlre
的扩展模式页面我们可以阅读\K
:
保留左侧的内容
\K
,不要将其包含在 $& 中
这是使用 GNU 的实际示例grep
(它实际上保持了 的正确性\K
):
$ echo "foo bar buzz" | grep -Po "foo \Kbar buzz"
bar buzz
是否存在相反的顺序\K
?
例如仅打印bar
,例如:
$ echo "foo bar buzz" | grep -Po "foo \Kbar\X buzz"
bar
答案1
在这种情况下,零宽度前瞻(?=...)
可以满足您的需求:
$ echo foo bar buzz | grep -Po "foo \Kbar(?= buzz)"
bar
它确实需要一些额外的括号。向前查找没有像 那样的单字符转义\K
。
\K
到目前为止,实际上只是一个零宽度的lookbehind,所以这也相当于
echo foo bar buzz | grep -Po "(?<=foo )bar(?= buzz)"
我个人觉得更容易遵循。