web-dev-qa-db-ja.com

\ 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
3
kenorb

この場合、 zero-width lookahead (?=...)は必要なことを行います

$ echo foo bar buzz | grep -Po "foo \Kbar(?= buzz)"
bar

いくつかの追加の括弧が必要です。 \Kとは異なり、先読みには1文字のエスケープはありません。

\Kは、これまでのすべてのことについて、実際には幅がゼロの後読みになっているため、これも次と同等です。

echo foo bar buzz | grep -Po "(?<=foo )bar(?= buzz)"

個人的にフォローする方が簡単だと思います。

9
Michael Homer