Sua tarefa é escrever um RegEx que corresponda a tudo dentro das strings.
Uma string é definida como tudo cercado por (mas não incluindo) dois sem escape "
.
Um "
pode ser escapado por \
, que também pode ser escapado novamente.
Casos de teste
string: ab\c"defg\\\"hi"jkl"mn\\\\"opqrst""
matches: ^^^^^^^^^^ ^^^^^^ ^ (the empty string)
Pontuação
A solução mais curta vence.
Especificações
- Por favor, especifique o sabor usado.
- A entrada terá balanceado
"
. - Não haverá nenhum
\
que preceda imediatamente um delimitador do início da string. Por exemplo, você não precisaria lidar comabc\"def"
code-golf
string
regular-expression
syntax
Freira Furada
fonte
fonte
\
antes de uma string? Por exemploabc\"def"
.abc"de"
, uma éd
e a outra ée
?Respostas:
PCRE,
21201519 bytesExperimente 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,
2523 bytesAgradecimentos a Martin Büttner por jogar fora 2 bytes.
Experimente aqui.
Explicação
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:
\\.
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.(\\.|[^"])*+
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.fonte
(\\.|[^"])
?([^\\"]|\\.)
, não como a solução completa.\\.
só falha quando não há caractere depois\
(ou caractere de nova linha, mas isso pode ser corrigido com sinalizador), e esse caso é coberto pelo olhar negativo por trás. O quantificador possessivo impede o retorno, portanto, não temos outro caso para examinar.JavaScript, 24 bytes
"([^"\\]*(?:\\.[^"\\]*)*)"
Grupo 1 é o conteúdo da sequência.
fonte
"
sJavaScript,
21151312 bytes"((\\?.)*?)"
O conteúdo da sequência está no grupo 1.
fonte