如果前面没有斜杠,则在特定字符上拆分字符串[重复]

问题描述 投票:0回答:1

按照协议文档,我可以接收编码为字符串的参数数组,其中每个参数与其他参数之间用空格分隔。参数内的空格用反斜杠转义。

因此,假设参数数组中有以下字符串:

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"
}
php regex preg-split
1个回答
4
投票

只需使用负向后看

$params = preg_split('/(?<!\\\\) /', $str);

上面的正则表达式匹配前面没有反斜杠的每个空格,这正是您想要的。

查看实际效果

更新:您之前的正则表达式会吃掉字母,因为它匹配空格前面的字符(只要它不是反斜杠);因此,该字符被视为分隔符的一部分,并与空格一起从输出中删除。

lookbehind 版本断言空格前面没有反斜杠,但不匹配字符——这是一个重要的区别。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.