in reply to separated quoted stings from unquoted strings

Update:Enlil++ points out that the original solution below isn't. I completely missed capturing the first unquoted word in the example string, which translates to missing any and all unquoted strings that are not followed by a quoted string or the end-of-string! Whoops.

The addition of * at the end of the second regex fixes the problem (I think?).

$s = 'one seven eight two "three" four "five" "nine" ten eleven six tw +elve'; @q = $S =~ m[" ( [^"]+ ) "]gx; print @q three five nine @u = $S =~ m[(\S+)\s* (?: (?: " [^"]+ " \s*) | $ )* ]gx; print @u one seven eight two four ten eleven six twelve

Provided your quoted strings don't contain embedded quotes, this should work once you've checked for balanced quotes. $string = 'one two "three" four "five" six'; @quoted = $string =~ m[" ( ^"+ ) "]gx; @unquoted = $string =~ m[(\S+)\s* (?: (?: " ^"+ " \s*) | $ )]gx; print @quoted; print @unquoted; three five two four six


Examine what is said, not who speaks.

The 7th Rule of perl club is -- pearl clubs are easily damaged. Use a diamond club instead.