我使用一个php库通过rcon在srcds服务器上执行命令。在这种情况下,我想得到所有的禁令和期限。当我通过rcon执行listid
时,经过一些解析后,我得到如下文本:
1 STEAM_1:0:12345678 : permanent 2 STEAM_1:0:87654321 : 30.000 min
现在我想得到一个数组,它包含每个集合的SteamID和持续时间,如下所示:
$Bans = [
"STEAM_1:0:12345678" => "permanent",
"STEAM_1:0:87654321" => "30.000 min",
]
因为我不能用
explode
来帮我做这件事(或者至少我不知道该怎么做),所以我想用regex来试试。到目前为止我的尝试是:/^(?:\d\s)(STEAM_[0-5]:[01]:[0-9]{1,8})(?:\s:\s)(permanent|\d{1,}\.000\smin)/g
但这不符合正确的方式。你会怎么做?
最佳答案
正确的regex和preg_match_都是:
preg_match_all("/(?:\d\s)(STEAM_[0-5]:[01]:[0-9]{1,8})(?:\s:\s)(permanent|\d{1,}\.000\smin)/", $input_lines, $output_array);
我需要删除
^
。现在,我甚至不必事先做所有的爆炸。即使从原始结果来看,我也匹配正确的部分:ID filter list: 2 entries 1 STEAM_1:0:12345678 : permanent 2 STEAM_1:0:87654321 : 30.000 min L 05/20/2015 - 15:48:53: rcon from "188.40.142.20:60799": command "listid"