Votre tâche consiste à écrire un RegEx qui correspond à tout ce qui se trouve à l'intérieur des chaînes.
Une chaîne est définie comme tout ce qui est entouré (mais non compris) de deux non échappés "
.
A "
peut être échappé par \
, qui peut également être échappé à nouveau.
Cas de test
string: ab\c"defg\\\"hi"jkl"mn\\\\"opqrst""
matches: ^^^^^^^^^^ ^^^^^^ ^ (the empty string)
Notation
La solution la plus courte l'emporte.
Spécifications
- Veuillez préciser la saveur utilisée.
- L'entrée sera équilibrée
"
. - Aucun élément ne
\
précédera immédiatement un délimiteur de début de chaîne. Par exemple, vous n'auriez pas besoin de gérerabc\"def"
code-golf
string
regular-expression
syntax
Leaky Nun
la source
la source
\
avant une chaîne? Par exempleabc\"def"
.abc"de"
, l'uned
et l'autree
?Réponses:
PCRE,
21201519 octetsEssayez-le ici.
Cela correspond à un caractère (ou au début de l'entrée) avant le guillemet double de début, puis réinitialise la correspondance, pour vous assurer que le guillemet double n'est pas partagé avec une autre correspondance.
PCRE,
2523 octetsMerci à Martin Büttner pour avoir joué au golf sur 2 octets.
Essayez-le ici.
Explication
Notez que le quantificateur possessif (
*+
) s'est assuré que l'anticipation négative commence toujours après une chaîne entière ou un segment entier de non-chaîne.Il y a 4 cas:
\\.
ne correspondrait jamais à une citation double selon la clarification. Il ne peut se terminer que juste avant le prochain guillemet double qui commence une chaîne ou la fin de l'entrée. Les deux cas échouent à l'anticipation négative.(\\.|[^"])*+
correspondrait à une chaîne complète. Le caractère suivant doit être un guillemet double et ne peut pas être la fin de la saisie. Après la citation double, il est en dehors de la chaîne, il ne peut donc pas s'agir d'une autre correspondance. Il passe donc l'anticipation négative.la source
(\\.|[^"])
marcherait?([^\\"]|\\.)
, pas comme la solution complète.\\.
échoue uniquement lorsqu'il n'y a pas de caractère après\
(ou un nouveau caractère de ligne, mais cela peut être corrigé avec un indicateur), et ce cas est couvert par le regard négatif. Le quantificateur possessif empêche le retour en arrière, nous n'avons donc pas d'autre cas à examiner.JavaScript, 24 octets
"([^"\\]*(?:\\.[^"\\]*)*)"
Le groupe 1 est le contenu de la chaîne.
la source
"
s extérieurJavaScript,
21151312 octets"((\\?.)*?)"
Le contenu des chaînes est dans le groupe 1.
la source