\K を使うと、そこまでのマッチ部を省略できる
ip -br a
からIPv4 を取り出す例
$ ip -br a | grep eth2 eth2 169.254.70.21/16 fe80::4154:6db4:aec3:32f/64
コレを、\k
で書くとこうなる。
ip -br a | grep -oP 'eth2\s+\K[\d.]+'
つまり、後方参照を使わなくても、「前読み」で戦えるわけだ。
php の例
これをphpで使うと。次の用になる。
before( グループ )
<?php preg_match_all( '/^eth2\s+([\d.]+)/m', `ip -br a ` , $m); if ( sizeof ($m) > 0 ){ var_dump($m[1][0]); }
after ( \K
利用時 )
<?php preg_match_all( '/^eth2\s+\K[\d.]+/m', `ip -br a ` , $m); var_dump($m);
if 文が省略できて便利。
ruby とかでも
#!/usr/bin/env ruby p `ip -br a `.match(/^eth2\s+([\d.]+)/) p `ip -br a `.match(/^eth2\s+\K[\d.]+/)
結果はこの様になる。
#<MatchData "eth2 169.254.70.21" 1:"169.254.70.21"> #<MatchData "169.254.70.21">
if文などチェックが簡潔になる。
ネストが減らせて便利。
知ってたら楽、知らなくていいコト。そして、初見殺しである。知らない人にはなぜそうなるか全く想像がつかない間違ったソースコードに見える可能性があって怖いけど便利。