用逗号分割字符串而不是双引号内[重复]

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

我想用逗号分隔以下字符串。

1,"x1",43,"tr","y,7"

结果数组应如下所示。

[
    0 => '1',
    1 => '"x1"',
    2 => '43',
    3 => '"tr"',
    4 => '"y,7"'
]

简而言之,如果引号之间有逗号,则不应该考虑逗号。

如果我使用爆炸,我会得到以下结果,这是我不想要的。

[
    0 => '1',
    1 => '"x1"',
    2 => '43',
    3 => '"tr"',
    4 => '"y',
    5 => '7"'
]

我被困在这里,请帮忙。

php regex csv split
3个回答
3
投票

尝试

str_getcsv

<?php

$s = '1,"x1",43,"tr","y,7"';
$result = str_getcsv($s);
var_dump($result);
echo "\n";

// array(5) {
//   [0]=>
//   string(1) "1"
//   [1]=>
//   string(2) "x1"
//   [2]=>
//   string(2) "43"
//   [3]=>
//   string(2) "tr"
//   [4]=>
//   string(3) "y,7"
// }


?>

2
投票

以下片段:

$s = '1,"x1",43,"tr","y,7"';
print_r(preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $s));

产生:

Array
(
    [0] => 1
    [1] => "x1"
    [2] => 43
    [3] => "tr"
    [4] => "y,7"
)

如在 ideone 上可见。

正则表达式

,(?=([^"]*"[^"]*")*[^"]*$)
的意思是:匹配逗号,前提是它前面有零个或偶数个双引号。


1
投票

简单!!您的字符串是 CSV。

使用

$your_array=str_getcsv($your_string);

© www.soinside.com 2019 - 2024. All rights reserved.