在txt文件中使用'['和']'过滤行,并使它们成为http href链接

时间:2015-08-13 16:09:04

标签: php

昨天我提出了一个关于搜索'('和')'之间所有内容的问题。 Filter lines in txt files and make them http href links

如果发现这两个标志,则需要将其内容放入如下的href链接中:

在:

09:02:10 - Admin SO_Conner (1374991) teleported to player Footman_Skull_of_Reyne (1050854).

应该是什么:

09:02:27 - Admin SO_Conner  (<a href="?get_engine&loopup=1374991">1374991</a>) teleported to player Valyrian_Militia_Crazymortal (<a href="?get_engine&loopup=1575057">1575057</a>)

代码:

$line = preg_replace('/\((\d+)\)/', '<a href="?get_engine&loopup=$1">$1</a>', $line);

代码适用于这些符号'('')',但现在我希望它也适用于这些符号:'['和']'以及。

当我尝试将这些标志放入'['']时,它就不起作用了。

任何方式使其不仅可以使用这些符号'('和')',还可以使用这些'['']'。

所以它会像这样工作:

08:52:04 - *DEAD* [<a href="?lookup=SO_Conner">SO_Conner</a>] No

感谢您阅读!

1 个答案:

答案 0 :(得分:2)

更优雅的解决方案:

使用回调和命名的后向引用:

<?php

function my_callback($matches) {
    return '<a href="?get_engine&loopup='.$matches['match'].'">'.$matches['match'].'</a>' ;
}
$line = '09:02:10 - Admin SO_Conner [1374991] teleported to player Footman_Skull_of_Reyne (1050854).';
$line = preg_replace_callback("/(?'match'\((\d+)\)|\[(\d+)\])/", 'my_callback', $line);
echo $line;
?>

正则表达式的变化是添加一个或(字符),然后添加额外的正则表达式来捕获[]

之间的位
(\[(\d+)\])

然后将其包装到名为match的命名组中,并将所有这些组传递给回调函数以构建链接。

DEMO:http://phpfiddle.org/main/code/v62x-sjpy

循环中:     

    function my_callback($matches) {
        return '<a href="?get_engine&loopup='.$matches['match'].'">'.$matches['match'].'</a>' ;
    }

    //assuming you have each line as an item in an array called $lines
    foreach ($lines as $key=>$line) {
        $lines[$key] = preg_replace_callback("/(?'match'\((\d+)\)|\[(\d+)\])/", 'my_callback', $line);
    }

    print_r($lines);
?>