在协议文档之后,我可以接收一个编码为字符串的参数数组,其中每个参数都用空格与其他参数隔开。参数中的空格使用反斜杠进行转义。
因此,假设我们在参数数组中有以下字符串:
array('Eli is beautiful', 'Fran is ugly', 'Oso is nice')
这些将仅编码在一个字符串中,如下所示:
Eli' is' beautiful Fran' is' ugly Oso' is' nice
编码不是一个主要问题,但我面临着解码问题。
我尝试使用正则表达式拆分参数,该表达式应按不在反斜杠之后的空格进行拆分,因此这是我的代码:
$params = preg_split('/[^'''']'s/', $str);
它按预期拆分参数,但它也删除每个参数的最后一个字符,因此这是var_dump的输出:
array(3) {
[0]=>
string(15) "Eli is beautifu"
[1]=>
string(11) "Fran is ugl"
[2]=>
string(11) "Oso is nice"
}
有人知道如何解决这个问题吗?
TIA,
只需使用负面的回溯:
$params = preg_split('/(?<!'''') /', $str);
上面的正则表达式匹配前面没有反斜杠的每个空格,这正是您想要的。
看到它的实际效果。
更新:您之前的正则表达式会占用字母,因为它与空格前面的字符匹配(只要它不是反斜杠);因此该字符被视为分隔符的一部分,并与空格一起从输出中删除。
后视版本断言空格前没有反斜杠,但与字符不匹配 - 这是一个重要的区别。