正则表达式拆分此字符串

时间:2011-01-15 12:54:44

标签: php regex

我想用逗号分隔后面的字符串。

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

结果数组应如下所示。

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

简而言之,它不应该考虑逗号是否在引号之间。

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

[4:58:20 PM] Mihir Dhandha: 0=>1
1=>"x1"
2=>43
3=>"tr"
4=>"y
5=>7"

我被困在这里,请帮助。

3 个答案:

答案 0 :(得分: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"
// }


?>

答案 1 :(得分: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上看到。

正则表达式,(?=([^"]*"[^"]*")*[^"]*$)表示:匹配逗号,只有它有零或前面有偶数双引号。

答案 2 :(得分:1)

易于!!您的字符串是CSV。

使用$your_array=str_getcsv($your_string);