PCRE, 21 20 15 19 bytes
(.|^)"\K(\\.|[^"])*
Experimente aqui.
Isso corresponde a um caractere (ou ao início da entrada) antes da aspas duplas iniciais e, em seguida, redefine a correspondência, para garantir que a aspas duplas não seja compartilhada com outra correspondência.
PCRE, 25 23 bytes
Agradecimentos a Martin Büttner por jogar fora 2 bytes.
(\\.|[^"])*+(?!"(?R)|$)
Experimente aqui.
Explicação
(
\\.|[^"] # An escaped character, or a character that isn't a double quote
)*+ # Possessive zero-or-more quantifier, which means backtracking
# could not happen after first match is found. That means if \\.
# matched, it would never switch to [^"], because it is always a
# match if it just stopped after the \\. without backtracking.
(?!"(?R)|$) # Make sure it is not followed by a double quote and another
# match, or the end of the input.
Observe que o quantificador possessivo ( *+
) garantiu que a cabeça de impressão negativa sempre iniciasse após uma sequência inteira ou um segmento inteiro de não sequência.
Existem 4 casos:
- A partida começa em qualquer lugar fora de uma string.
\\.
nunca corresponderia a aspas duplas de acordo com o esclarecimento. Só poderia terminar um pouco antes da próxima citação dupla que inicia uma sequência ou o final da entrada. Ambos os casos falham na aparência negativa.
- A partida começa no início de uma sequência.
(\\.|[^"])*+
corresponderia a uma sequência completa. O próximo caractere deve ser aspas duplas e não pode ser o fim da entrada. Após as aspas duplas, ele fica fora da sequência, portanto não pode haver outra correspondência. Por isso, passa pelo negativo negativo.
- A partida começa no final de uma sequência. Corresponde a uma sequência vazia da mesma maneira que no caso anterior. Mas isso não importa de acordo com o esclarecimento.
- A partida começa no meio de uma sequência. Impossível porque as correspondências não se sobrepõem.
\
antes de uma string? Por exemploabc\"def"
.