min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

PHP preg_match() の正規表現

 

実行中の動画圧縮HandBrakeCLIのPIDを取ってくるだけのプログラム作りたい。

こんな実行状況だとして、2列目(PID)と13列目(圧縮対象ファイル名)はbashsedで切り出す。

f:id:min117:20160117213838p:plain

PHP内では

$command = "ps aux | grep HandBrake | grep -v grep | awk '{print $2,$13}'";

としておいて、

 $handle = popen($command , "r"); 

でポインタのハンドラ作って

if($handle){

  while(!feof($handle){

     $buffer = fgets($handle); してバッファに入れたら

         if(preg_match('/(正規表現①).*(正規表現②)/', $buffer, $m)){

する。

$bufferの文字列を正規表現①②でキャプチャして、その結果を配列$mに①②の順で入れていく。

ーーー

このキャプチャが難しい。正規表現が奥深いと言ってもいいか。以下のサイトでチェックしながら進めるけど。なかなかマッチしない。

okumocchi.jp

 

f:id:min117:20160117214843p:plain

疑問点

・$m[0] に入る圧縮ファイル名の拡張子 .ts がキャプチャされないのは何故か。

・$m[2]に 1 がキャプチャされるのは何故か。

もっと慣れないと。使い物にならん。自分が。

ーーー

とりあえず preg_match() をカタチで覚えちゃう。

preg_match('', $buffer, $m);

preg_match('//', $buffer, $m);

preg_match('/()/', $buffer, $m);

preg_match('/().*/', $buffer, $m);

preg_match('/().*()/', $buffer, $m);

preg_match('/(正規表現).*()/', $buffer, $m);

preg_match('/(正規表現①).*(正規表現)/', $buffer, $m);