【发布时间】:2020-09-05 19:51:55
【问题描述】:
我有一个由外部 API 提供的字符串(来自 Minecraft Bedrock 服务器的未连接 ping),格式如下:
Edition (MCPE or MCEE);MOTD line 1;Protocol Version;Version Name;Player Count;Max Player Count;Server Unique ID;MOTD line 2;Game mode;Game mode (numeric);Port (IPv4);Port (IPv6)
我只需使用string.split(';') 来获取分号分隔符之间的每个值,但问题是MOTD line 1 和MOTD line 2 值可以在其中包含;,作为值的一部分.以下是上述格式的示例,值本身没有分号:
MCPE;Dedicated Server;390;1.14.60;0;10;13253860892328930865;Bedrock level;Survival;1;19132;19133;
...这是上面的示例,在 MOTD 第 1 行和第 2 行的值中使用分号:
MCPE;MOTD A;B;C;390;1.14.60;0;10;13253860892328930865;Bedrock level a; b; c;Survival;1;19132;19133;
正如您可能猜到的那样,简单地用分隔符分割字符串是行不通的。 MOTD 行 1/2 由服务器所有者提供,可以包含几乎任何字符。只有 MOTD 值可以在值中包含分号。
我已经被这个问题困扰了一段时间,无法在 Discord 上的任何编程服务器中获得任何帮助。我尝试使用 RegEx 解析 MOTD 行,直到下一个 ;number,但我没有足够的经验来做到这一点。 Here is the link 我是从哪里得到这个字符串的。
【问题讨论】:
-
那么是什么已知的?当有问题分号时,它总是以 MOTD 开头吗?如果是这样,后面的值是否有特定的格式?
-
如果你没有办法区分它们,你就无法解析它们。通常你应该有一个转义序列。
-
@slappy 是的,MOTD 行 1/2 有时会出现问题。这些值由用户提供,可以包含协议页面中
string数据类型中讨论的任何字符:wiki.vg/Raknet_Protocol#Data_types -
@Bergi 是的,我就是这么想的。服务器不会以任何方式逃避它。我只需要找到别人的例子,看看他们是怎么做的。
标签: javascript string delimiter