用PHP解析日志文件//用数字显示行

时间:2013-12-19 23:16:53

标签: php

我有一个将数据导出到日志文件的奇怪脚本,文件如下所示:

contactid: 
15186 is present in PND!. contactid: 15186
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
PND Done contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
3630 Is present in PMF!. contactid: 3630
contactid: 
contactid: 
3679 Is present in PMF!. contactid: 3679
3695 Is present in PMF!. contactid: 3695
3699 Is present in PMF!. contactid: 3699
contactid: 
contactid: 
contactid: 
3761 Is present in PMF!. contactid: 3761
contactid: 
3767 Is present in PMF!. contactid: 3767
3770 Is present in PMF!. contactid: 3770
3772 Is present in PMF!. contactid: 3772
contactid: 
3785 Is present in PMF!. contactid: 3785
contactid: 
contactid: 

我编写了一个删除前导contactid:文字的脚本:

$file1 = $_GET['id'].".log";
$lines = file($file1);  
foreach($lines as $line_num => $line)
{
    $int = trim($line, "contactid: <br/>");
    echo $int;
}

然后我可以在浏览器中打开文件,返回如下数据:

15186 is present in PND!. contactid: 15186
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
PND Done contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
contactid: 
3630 Is present in PMF!. contactid: 3630
contactid: 
contactid: 
3679 Is present in PMF!. contactid: 3679
3695 Is present in PMF!. contactid: 3695
3699 Is present in PMF!. contactid: 3699
contactid: 
contactid: 
contactid: 
3761 Is present in PMF!. contactid: 3761
contactid: 
3767 Is present in PMF!. contactid: 3767
3770 Is present in PMF!. contactid: 3770
3772 Is present in PMF!. contactid: 3772
contactid: 
3785 Is present in PMF!. contactid: 3785
contactid: 
contactid: 

我要做的是删除所有空的contactid:行,这样我的输出如下所示:

15186 is present in PND!. contactid: 15186
3630 Is present in PMF!. contactid: 3630
3679 Is present in PMF!. contactid: 3679
3695 Is present in PMF!. contactid: 3695
3699 Is present in PMF!. contactid: 3699
3761 Is present in PMF!. contactid: 3761
3767 Is present in PMF!. contactid: 3767
3770 Is present in PMF!. contactid: 3770
3772 Is present in PMF!. contactid: 3772
3785 Is present in PMF!. contactid: 3785

删除这些数据让我感到震惊!任何有关实现此功能的帮助或提示都会很棒!

2 个答案:

答案 0 :(得分:0)

您可以先使用带有FILE_IGNORE_NEW_LINES标记的file()加载文件,以忽略新行。然后,使用trim()从行的开头和结尾删除空白,然后如果整行不等于 contactid:则打印该行。

$lines = file($file1, FILE_IGNORE_NEW_LINES);  
foreach($lines as $line_num => $line)
{
    if (trim($line) !== 'contactid:') {
        echo $line.'<br/>';
    }
}

在这种情况下,使用正则表达式可能更容易:

$content = file_get_contents('file.txt');
echo preg_replace('/(contactid:\s*)/', '', $content);

正则表达式尸检:

  • () - 表示捕获组
  • contactid: - 字面匹配字符contactid:
  • \s* - 匹配任何空格字符零次或多次

该声明表示:将contactid:<whitespace>''匹配的所有内容。

答案 1 :(得分:0)

使用Amal的代码我想出了这个,它给了我想要的结果,但是我可以通过组合preg_replace()来清理代码:

$content = file_get_contents($file1, FILE_IGNORE_NEW_LINES);
$str = preg_replace('/(contactid: <br\/>\s*)/', '', $content);
$str2 = preg_replace('/(PND Done\s*)/', 'PND Done <br/>', $str);
echo preg_replace('/(PMF Done\s*)/', 'PMF Done <br/>', $str2);

但是它给了我一直在寻找的输出......

谢谢!