php正则表达式为preg_match_all

时间:2013-06-13 19:26:28

标签: php regex preg-match-all

您好我使用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
)

但我也想让它返回空白的请求帮助。

3 个答案:

答案 0 :(得分: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
)

答案 1 :(得分:0)

使用~("[^"]*"|[^,]*)(,|)~实际上会做你需要的,除了它总是在末尾有一个空字符串(因为那是一个空字符串),它会在matches数组中添加2个组。

答案 2 :(得分:-2)

我认为你也可以使用爆炸。

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

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