我有一个正在实时查看日志文件最后一行的脚本。出现以下行时。我想在第二组括号内提取数据。我的原始代码运行正常,问题是日志输出已更改。示例日志输出:
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;
答案 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;
?>