我使用一个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"

08-05 05:23