Su tarea es escribir un RegEx que coincida con todo dentro de las cadenas.
Una cadena se define como todo rodeado por (pero sin incluir) dos sin escape "
.
Se "
puede escapar por A \
, que también se puede escapar nuevamente.
Casos de prueba
string: ab\c"defg\\\"hi"jkl"mn\\\\"opqrst""
matches: ^^^^^^^^^^ ^^^^^^ ^ (the empty string)
Puntuación
La solución más corta gana.
Especificaciones
- Por favor, especifique el sabor utilizado.
- La entrada se habrá equilibrado
"
. - No habrá ninguno
\
que preceda inmediatamente a un delimitador de inicio de cadena. Por ejemplo, no necesitaría manejarabc\"def"
code-golf
string
regular-expression
syntax
Monja permeable
fuente
fuente
\
antes de una cadena? Por ejemploabc\"def"
.abc"de"
, una esd
y la otra ese
?Respuestas:
PCRE,
21201519 bytesPruébalo aquí.
Esto coincide con un carácter (o el comienzo de la entrada) antes de la comilla doble inicial y luego restablece la coincidencia, para asegurarse de que la comilla doble no se comparta con otra coincidencia.
PCRE,
2523 bytesGracias a Martin Büttner por jugar golf en 2 bytes.
Pruébalo aquí.
Explicación
Tenga en cuenta que el cuantificador posesivo (
*+
) se aseguró de que la búsqueda anticipada negativa siempre comience después de una cadena completa o un segmento completo de no cadena.Hay 4 casos:
\\.
nunca coincidiría con una comilla doble según la aclaración. Solo podría terminar justo antes de la próxima comilla doble que comienza una cadena, o el final de la entrada. Ambos casos falla la anticipación negativa.(\\.|[^"])*+
coincidiría con una cadena completa. El siguiente carácter debe ser una comilla doble y no puede ser el final de la entrada. Después de la comilla doble está fuera de la cadena, por lo que no podría ser otra coincidencia. Entonces pasa la mirada negativa hacia adelante.fuente
(\\.|[^"])
?([^\\"]|\\.)
, no como la solución completa.\\.
solo falla cuando no hay un carácter después\
(o un nuevo carácter de línea, pero eso se puede arreglar con la bandera), y ese caso está cubierto por la mirada negativa. El cuantificador posesivo evita el retroceso, por lo que no tenemos otro caso para mirar.JavaScript, 24 bytes
"([^"\\]*(?:\\.[^"\\]*)*)"
El grupo 1 es el contenido de la cadena.
fuente
"
sJavaScript,
21151312 bytes"((\\?.)*?)"
El contenido de la cadena está en el grupo 1.
fuente