|
Posted by Rik on 05/31/06 17:41
siromega@gmail.com wrote:
> I found a regex and a function that accomplished what I
> needed...
>
> function csv_string_to_array($str){
> $expr="/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/";
> $results=preg_split($expr,trim($str));
> return preg_replace("/^\"(.*)\"$/","$1",$results);
> }
> I just had to replace the \" with ' to get it to parse my strings. I
> tested it with both '' and , in the encapsulated string and it works!
I hate to be the bearer of bad tidings, but it will fail on single escaped
\":
$str = '"baz,\"bax", bay, foz, "a, b", "foo';
$expr="/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/";
$results=preg_split($expr,trim($str));
$res = preg_replace("/^\"(.*)\"$/","$1",$results);
print_r($res);
Array
(
[0] => "baz
[1] => \"bax"
[2] => bay
[3] => foz
[4] => "a, b"
[5] => foo
)
Properly nested, it can handle it:
$str = '"baz,\"bax\"", bay, foz, "a, b", foo';
Array
(
[0] => baz,\"bax\"
[1] => bay
[2] => foz
[3] => "a, b"
[4] => foo
)
Also a nice one is:
$str = 'bay, foz, "a, b", "fo\"o"';
Array
(
[0] => bay, foz, "a
[1] => b", "fo\"o"
)
Not a very robust one here.
But maybe it's OK for your data, it all depends how much you know for sure
about that.
Grtz,
--
Rik Wasmus
Navigation:
[Reply to this message]
|