Мне нравится это:
perl -ne 'print "$_\n" foreach /"((?>[^"\\]|\\+[^"]|\\(?:\\\\)*")*)"/g;'
Это немного многословно, но оно обрабатывает экранированные кавычки и возвращает их намного лучше, чем простейшая реализация. Что это говорит:
my $re = qr{
" # Begin it with literal quote
(
(?> # prevent backtracking once the alternation has been
# satisfied. It either agrees or it does not. This expression
# only needs one direction, or we fail out of the branch
[^"\\] # a character that is not a dquote or a backslash
| \\+ # OR if a backslash, then any number of backslashes followed by
[^"] # something that is not a quote
| \\ # OR again a backslash
(?>\\\\)* # followed by any number of *pairs* of backslashes (as units)
" # and a quote
)* # any number of *set* qualifying phrases
) # all batched up together
" # Ended by a literal quote
}x;
Если вам не нужна такая большая мощность - скажем, это скорее всего диалог, а не структурированные цитаты, тогда
/"([^"]*)"/
, вероятно, работает так же хорошо, как и все остальное.