与 \K 相反,保持内容正确

与 \K 相反,保持内容正确

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)"

我个人觉得更容易遵循。

相关内容