2016-04-28 14 views
2

ログファイルの最終行をリアルタイムで監視しているスクリプトがあります。次の行が表示されます。私は第2セットの括弧内のデータを抽出したいと思います。私の元のコードは正常に動作し、問題はログの出力が変更されたことです。サンプルログ出力:私は最初の質問のライン#1の行が見つかった行であることを確認し、可能ならば、第二括弧の中のテキストを抽出する必要がRegexを使用してデータを抽出する際の解析の問題

2016-04-28 16:54:49  INFO [ADMINCGI sid=1] Title updated [Peezy - Dope Fein Baby (Feat. TID Sweeze & H.N.I.C Pesh)] 
2016-04-28 16:54:49  INFO [ADMINCGI sid=1] DJ name updated [1] 

私はこれを使用していますが、それは#2行を返して

マイコード:メインラインは、その正規表現よりも、デバッグにはるかに簡単であるため、

$line ="2016-04-27 22:56:48  INFO [ADMINCGI sid=1] Title updated [Tessa Feat. Gucci Mane - Get You Right]"; 
echo $line; 

$pattern="/\[([^\]]*)\]/"; 

$needle = " Title updated "; 
if (strpos($line,$needle) !== false) { 
preg_match_all($pattern, $line, $matches); 
foreach ($matches[1] as $a){ 

    // echo $a."</br>"; 
    // echo $matches[1][1]; 
    $fulltitle = explode("-", $matches[1][1]); 

    $artist = $fulltitle[0]; 
    $title = $fulltitle[1]; 
    echo $artist; 
+0

エントリに直接アクセスすると、なぜ配列を反復処理しますか?おそらく、多くのオンライン正規表現テスターがあなたのパターンをテストするのに役立つように、詳細についてはあまり気にしません。例:http://www.regexr.com/ – SmasherHell

+1

各行を個別にテストする場合は、 '' preg_match_all( '〜\ [([^] [] *)]'、$ input、$ m)を試してみてください。 $ my_val = $ m [1] [1]; '](http://ideone.com/jAwAKe) –

+0

@ BuzzzHost.com:フィードバックはありますか?あなたの提案はありますか? –

答えて

1

私はstrrpos()機能を使用して行くだろう

<?php 
$line ="2016-04-27 22:56:48  INFO [ADMINCGI sid=1] Title updated [Tessa Feat. Gucci Mane - Get You Right]"; 
echo $line; 

$match = rtrim(substr($line, strrpos($line, '[') + 1), "]"); 

$fulltitle = explode("-", $match); 

$artist = $fulltitle[0]; 
$title = $fulltitle[1]; 
echo $artist; 

?> 
+1

応答ありがとう:) –

+0

最後のこととフィードバックに感謝します。これは問題なく "Artist"と "Song Title"を抽出することができました。問題は、スクリプトが継続的に実行されており、曲が変更されたときにのみ起動する必要があることです。曲が変わるたびに、そのアーティストとタイトル以外の行にログが表示されます。私は曲が変わるたびにツイートを作成してTwitterに送ります。これは動作しますが、何が起こるかは、tweeting non stopを維持します。これは曲ごとに1回だけ変更する必要があります。 –

+0

2016-04-28 21:39:12情報[ADMINCGI sid = 1]タイトルが更新されました[Kevin Gates - Make Love(DatPiff Exclusive)] 2016-04-28 21:39:12 INFO [ADMINCGI sid = 1] DJ名前が更新されました[1] ソングが変更された直後に、上記の2行目が出力されます。正規表現は[1]と考えているため、その行からデータを取得しようとしています。アーティスト広告の曲名のみをとり、他はすべて無視する方法が必要です。私はこのようなもので最高ではないので、私は謝罪しますが、私は[ハイフンで区切られた]内の何かを見つけるためにコードが必要です。それが私が考えることができる2つの線との唯一の違いです。 –

関連する問題