Re: preg_match and delimited strings



Rik wrote:


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

Indeed, that is correct. I'm going to have to chcek out my data and see
if it'll work. Do you happen to know if fgetcsv() properly handle the
single " ?

.