使用Regex解析提取数据的问题

时间:2016-04-28 21:01:32

标签: php 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]

我需要首先确保问题第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;

1 个答案:

答案 0 :(得分: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;

?>