PHP字符串在空间爆炸,引号除外

时间:2018-07-27 07:40:42

标签: php regex string

我有一个类似于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, ' '));

产生相同的东西。

这些解决方案对我不起作用,因为如您所见,引号可能不在定界符(在本例中为空格)旁边开始。另外,那只是输入字符串的一个示例,它可能有很多变体。

1 个答案:

答案 0 :(得分:0)

寻找在空格前后加双引号的空格,然后对其进行分割:

$result = preg_split( "/((?<=\")\s)|(\s(?=\"))/" , $string );

((?<=\")\s)查找"[space],但未选择"

(\s(?=\"))查找[space]",但未选择"

结果:

Array
(
    [0] => title:"tab system"
    [1] => color:="blue"
    [2] => price:>10
)