Re: preg_match and delimited strings
- From: "Rik" <luiheidsgoeroe@xxxxxxxxxxx>
- Date: Wed, 31 May 2006 19:41:44 +0200
siromega@xxxxxxxxx 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
.
- Follow-Ups:
- Re: preg_match and delimited strings
- From: siromega
- Re: preg_match and delimited strings
- References:
- preg_match and delimited strings
- From: siromega
- Re: preg_match and delimited strings
- From: Rik
- Re: preg_match and delimited strings
- From: siromega
- preg_match and delimited strings
- Prev by Date: Handling exception question
- Next by Date: Re: Handling exception question
- Previous by thread: Re: preg_match and delimited strings
- Next by thread: Re: preg_match and delimited strings
- Index(es):
Relevant Pages
|