昨天我提出了一个关于搜索'('和')'之间所有内容的问题。 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
感谢您阅读!
答案 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);
?>