in reply to separated quoted stings from unquoted strings
Text::Balanced can handle all the nuances of quoted or delimited strings, including escapes. Plus it has built in diagnostics for unbalanced quotes, etc.
produces:use strict; use Text::Balanced qw(extract_quotelike); my $string = 'one two "three" four "five" six'; my ($q, $r, $p); my (@quoted, @unquoted); my ($quoted, $unquoted); $r = $string; while (($q, $r, $p) = extract_quotelike($r, '[^"]*')) { die "$@" if ($@ =~ /match/); $quoted .= " " if (defined($quoted)); $unquoted .= " " if (defined($unquoted)); if (!$q) { $unquoted .= $r; last; } $quoted .= $q; $unquoted .= $p; } @quoted = split(/\s+/, $quoted); @unquoted = split(/\s+/, $unquoted); print "quoted:\n ", join("\n ", @quoted), "\n"; print "unquoted:\n ", join("\n ", @unquoted), "\n";
quoted: "three" "five" unquoted: one two four six
I've used this package a bit. It's a little clumsy at times and may be overkill here but it may be useful if you need to handle more than the simple cases. If you're looking only for explict types of quotes one of its other methods may be more useful.
|
|---|