将SteamID与来自listid结果的禁止持续时间相匹配

时间:2015-05-20 13:38:35

标签: php regex parsing steam

我使用php库通过rcon在srcds-server上执行命令。在这种情况下,我希望获得所有禁令及其持续时间。当我通过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为我做这个(或者至少我不知道应该怎么做),我想用正则表达式来试试。到目前为止我的尝试:

/^(?:\d\s)(STEAM_[0-5]:[01]:[0-9]{1,8})(?:\s:\s)(permanent|\d{1,}\.000\smin)/g

但这与正确的方式不符。你会怎么做?

1 个答案:

答案 0 :(得分:0)

preg_match_all正确的正则表达式是:

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"