Maybe this problem is an exception to the rule (because you're
talking about "CSV-like" data, and not just "CSV"), but in
general it's a really bad idea to try to roll your own CSV
processing with regular expressions. CSV
seems very
simple, so you tend to think it'll be eaisier to just do it
yourself, but there are enough odd little corner-cases that
you're almost guaranteed to do something wrong (e.g. do you
allow items with commas inside them if they're quoted correctly?
if you allow quotes inside of a quoted item, how do you escape
the embedded quotes? Is it okay to allow spaces after the
commas? If you do, does that break someone else's CSV
parsing?).
When last I looked into this, your best bet was to use
Text::CSV_XS (or DBD::CSV, which uses it internally),
though you need to know that you always want to use the
"binary" option (i.e. they got the default wrong).