检查并替换文本文件中字符串中的文本

时间:2018-10-19 01:59:15

标签: php

我有这个脚本,它从文本文件中读取最后100行,然后将每一行分解为3个大块,并用空格隔开。我想检查的第三部分数据是否包含来自另一个文本文件filters.txt中某一行的单词或短语。如果找到匹配项,那么我想用某种格式替换该单词或短语,以便使其突出。下面是我所拥有的,但是它不起作用,针对过滤器进行检查的代码无效。

任何人都可以告诉我该怎么做。

谢谢。

这是来自sample.log的一行...

12:12:46 18-10-18#:10656200,1A,29D09,RTC NOT ALERT,,CHEMIST WAREHOUSE,,,910 David Low Way,MARCOOLA,S59K7,,,

filters.txt文件中将包含以下行...

RTC

RTC伤害

RTC不会警告

RTC高机率

在上面的示例中,当我打印数据时,我希望突出显示“ RTC NOT ALERT”,以便使其突出。简而言之,对于sample.log中的每一行,我想查看是否有任何过滤器出现,如果是的话,我希望它在输出中突出显示。我是通过使用CSS更改字体样式来实现的。

<?php


// OPEN LOG FILE FOR READING
$file = array_reverse( file( 'sample.log' ));

// OPEN FILTERS LIST
$filters = file( 'filters.txt' );


// START MAIN LOOP (SHOWS LAST X LINES FROM TEXT FILE)

$limit = 100;
for ($i = 0; $i < $limit; $i++ ){
$data = explode(' ', $file[$i],3);



// CHECK FOR FILTERS AND HIGHLIGHT IF MATCHED

foreach ( $filters as $filter ){
if (strpos($data[2], $filter) !== false) {
$data[2] = str_replace($filter,"<font 
class=\"highlight\">$filter</font>",$data[2]);
    }
}


// PRINT LIST

print "

<div class=\"code1a\">
<font class=\"time\">$data[0] $data[1]</font><br>
$data[2]
</div>

";


}

?>

1 个答案:

答案 0 :(得分:1)

尽管您没有在sample.log和filters.txt中提供任何示例,但我认为由于断行,您需要修剪每个$ filter。

尝试:

<?php
// OPEN LOG FILE FOR READING
$file = array_reverse( file( 'sample.log' ) );

// OPEN FILTERS LIST
$filters = file( 'filters.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES );

// START MAIN LOOP (SHOWS LAST X LINES FROM TEXT FILE)
$limit = 100;

// BECAUSE $file STARTS WITH 0
$limit -= 1;

foreach ( $file as $line => $line_content ) {
    if ( $line == $limit ) {
        break;
    }

    $data       = explode( ' ', $line_content, 3 );
    $highlight  = $data[ 2 ];

    // CHECK FOR FILTERS AND HIGHLIGHT IF MATCHED
    foreach ( $filters as $filter ) {
        if ( strpos( $highlight, ',' . $filter . ' ,'  ) !== false ) {
            $highlight = str_replace( $filter, '<font class="highlight">' . $filter . '</font>', $highlight );
        }
    }

    // PRINT LIST
    echo '<div class="code1a">';
    echo '<font class="time">', $data[ 0 ], ' ', $data[ 1 ], '</font>';
    echo '<br />';
    echo $highlight;
    echo '</div>';
}