将 SteamID 与 listid 结果中的禁令持续时间匹配
Match SteamID with ban duration from listid result
我使用 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
但这与它的匹配方式不对。你会怎么做?
带有 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"
我使用 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
但这与它的匹配方式不对。你会怎么做?
带有 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"