1

嗨,我正在使用 Preg_match_all 函数遍历一个字符串并返回其值的数组。

$str = 'field1,field2,field3,field4,,,,,,,"some text, some other text",field6';

preg_match_all("~\"[^\"]++\"|[^,]++~", $str,$match);

echo "<pre>";
print_r($match[0]);
echo "<pre>";

它返回这个。

Array
(
[0] => field1
[1] => field2
[2] => field3
[3] => field4
[4] => "some text, some other text"
[5] => field6
)

但我也希望它返回空白以请帮助。

4

3 回答 3

1

编辑:从更改explode()str_getcsv()修复外壳问题。

我会为此使用str_getcsv()。它比 preg_match_all() 更容易阅读和理解,它会完全按照你的意愿去做(它甚至会返回空字符串)。

例子:

<?php
$str = 'field1,field2,field3,field4,,,,,,,"some text, some other text",field6';

$results = str_getcsv($str);
print_r($results);

回报:

Array
(
    [0] => field1
    [1] => field2
    [2] => field3
    [3] => field4
    [4] => 
    [5] => 
    [6] => 
    [7] => 
    [8] => 
    [9] => 
    [10] => some text, some other text
    [11] => field6
)
于 2013-06-13T19:35:46.060 回答
0

Using~("[^"]*"|[^,]*)(,|)~实际上会做你需要的,除了它最后总是有一个空字符串(因为那也是一个空字符串)并且它向匹配数组添加了 2 个组。

于 2013-06-13T19:54:22.447 回答
-2

我想你也可以使用爆炸。

my_array = explode (',', $str);

注意:“一些文本,一些其他文本”将在数组的 2 个单元格中分开。

于 2013-06-13T19:32:22.190 回答