gudn tach!
Gesucht wird ein regulärer Ausdruck, mit dem ich eine Liste in ihre mit Komma getrennte Einzelteile zerlegen kann, z.B. String1,String2,String3.
Das Problem dabei ist, dass ein Komma auch im String vorkommen kann solange es escaped ist "," [...]
meine erste spontane idee ist
split /(?<=[^\\](?:\\\\)*),/, $str;
also ein komma, dem ein string vorausgeht, fuer den gilt: er beginnt mit einem nicht-backslash gefolgt von einer geraden anzahl (0 ist gerade) von backslashes.
das wird allerdings nicht funzen, weil perl keine variable-length look-behind assertions unterstuetzt. zumindest war das bis etwa perl 5.9 so. hast du perl 5.10? denn dann kannst du folgendes probieren:
split /[^\\](?:\\\\)*\K,/, $str;
das ist das gleiche in gruen, aber erlaubt var-length. siehe dazu [http://perldoc.perl.org/perlre.html].
alternativ dazu kannst du in aelteren perl-versionen auch einfach
split /([^\\](?:\\\\)*),/, $str;
benutzen, musst dann jedoch die entsprechenden zerhackten array-elemente wieder irgendwie zusammenfuehren.
ich bin mir nicht sicher, aber glaube, dass wir solche probleme schon mal im forum besprachen, evtl. findest du via forumssuche bessere loesungen.
prost
seth