Hm. I wouldn't want to try this without PCRE regexps...
I think a lookbehind negative assertion might do the trick. See the manual for its info on PCRE pattern syntax for details - it's too hairy to paraphrase here; but as it says "(?<!foo)bar" matches any occurrence of "bar" not immediately precededed by "foo".
Lessee, we need to escape the escape character so..., that would make it
$array = preg_split('/(?<!\)"/', $string);
Note that the \ remains, I guess you'd want to $array = str_replace('\"','"',$array); as well.