我有一个类似于this question的问题,但是又有一个问题。
我要爆炸以下字符串:
title:"tab system" color:="blue" price:>10
进入
array("title:\"tab system\"", "color:=\"blue\"", "price:>10")
这是我到目前为止从上面的链接尝试过的内容:
$text = "title:\"tab system\" color:=\"blue\" price:>10";
preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', $text, $matches);
print_r($matches);
哪个会产生:
(
[0] => title:"tab
[1] => system"
[2] => color:="blue"
[3] => price:>10
)
和:
print_r(str_getcsv($text, ' '));
产生相同的东西。
这些解决方案对我不起作用,因为如您所见,引号可能不在定界符(在本例中为空格)旁边开始。另外,那只是输入字符串的一个示例,它可能有很多变体。
答案 0 :(得分:0)
寻找在空格前后加双引号的空格,然后对其进行分割:
$result = preg_split( "/((?<=\")\s)|(\s(?=\"))/" , $string );
((?<=\")\s)
查找"[space]
,但未选择"
(\s(?=\"))
查找[space]"
,但未选择"
结果:
Array
(
[0] => title:"tab system"
[1] => color:="blue"
[2] => price:>10
)