テキストに対して、grepのようなことってあまりやったことがなくて、今回たまたま必要になったので、調べてみたことを記録しておきます。要は、正規表現を使ってマッチした行を消すか、マッチしなかった行を消すかで、残すか、消すか、どちらにもころべるところがよかったです。

preg_replaceのオプションにm(multi line?)を使って置換する

neko 含む行だけ、テキストから抜き出してみます

$str='
inu
neko
uma
saru
';

echo preg_replace("/^(?!.*neko).*$/m","",$str);

/*
結果
neko
*/

次は、neko以外の行だけを取り出します。nekoが含んでいる行を削除しつつ、改行も削除しないといけないことに注意します。

$str='
inu
neko
uma
saru
';

echo preg_replace("/^.*neko.*[\r\n]/m","",$str);


/*
結果
inu
uma
saru
*/

はい、うまくいきました。

スクレイピングとかする人に結構使えそうな感じですね。メモメモ

コメント