それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

正規表現の\K で1つだけなら後方参照を省略できて便利

\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文などチェックが簡潔になる。

ネストが減らせて便利。

知ってたら楽、知らなくていいコト。そして、初見殺しである。知らない人にはなぜそうなるか全く想像がつかない間違ったソースコードに見える可能性があって怖いけど便利。

関連資料

Grep に'\K' という便利な書式がある。 - それマグで!