Ihre Aufgabe ist es, eine RegEx zu schreiben, die mit allen Zeichenfolgen übereinstimmt.
Eine Zeichenfolge ist definiert als alles, was von zwei nicht entflohenen Zeichen umgeben ist (diese jedoch nicht einschließt) "
.
A "
kann entkommen werden \
, was auch wieder entkommen kann.
Testfälle
string: ab\c"defg\\\"hi"jkl"mn\\\\"opqrst""
matches: ^^^^^^^^^^ ^^^^^^ ^ (the empty string)
Wertung
Die kürzeste Lösung gewinnt.
Technische Daten
- Bitte geben Sie den verwendeten Geschmack an.
- Der Eingang ist ausgeglichen
"
. - Es wird keine geben
\
, die unmittelbar vor einem Zeichenfolgenanfangsbegrenzer steht. Zum Beispiel müssten Sie nicht behandelnabc\"def"
code-golf
string
regular-expression
syntax
Undichte Nonne
quelle
quelle
\
vor einer Schnur geben? Zum Beispielabc\"def"
.abc"de"
, eine istd
und die andere iste
?Antworten:
PCRE,
21201519 BytesProbieren Sie es hier aus.
Dies entspricht einem Zeichen (oder dem Anfang der Eingabe) vor dem beginnenden doppelten Anführungszeichen und setzt dann die Übereinstimmung zurück, um sicherzustellen, dass das doppelte Anführungszeichen nicht mit einer anderen Übereinstimmung geteilt wird.
PCRE,
2523 BytesVielen Dank an Martin Büttner für das Golfen von 2 Bytes.
Probieren Sie es hier aus.
Erläuterung
Beachten Sie, dass der Possessivquantifizierer (
*+
) sichergestellt hat, dass der negative Lookahead immer nach einer ganzen Zeichenfolge oder einem ganzen Segment von Nicht-Zeichenfolgen beginnt.Es gibt 4 Fälle:
\\.
würde niemals ein doppeltes Anführungszeichen gemäß der Klarstellung entsprechen. Es konnte nur kurz vor dem nächsten doppelten Anführungszeichen enden, das eine Zeichenfolge beginnt, oder vor dem Ende der Eingabe. In beiden Fällen schlägt der negative Lookahead fehl.(\\.|[^"])*+
würde mit einer vollständigen Zeichenfolge übereinstimmen. Das nächste Zeichen muss ein doppeltes Anführungszeichen sein und darf nicht das Ende der Eingabe sein. Nach dem doppelten Anführungszeichen befindet es sich außerhalb der Zeichenfolge, sodass es keine weitere Übereinstimmung geben kann. So passiert es den negativen Lookahead.quelle
(\\.|[^"])
funktionieren?([^\\"]|\\.)
, nicht als Komplettlösung.\\.
nur dann fehlschlägt, wenn kein Zeichen nach\
(oder ein neues Zeilenzeichen, aber das kann mit einem Flag behoben werden) vorhanden ist und dieser Fall durch den negativen Rückblick abgedeckt wird. Der Possessivquantifizierer verhindert das Zurückverfolgen, sodass wir keinen anderen Fall betrachten müssen.JavaScript, 24 Bytes
"([^"\\]*(?:\\.[^"\\]*)*)"
Gruppe 1 ist der Inhalt der Zeichenfolge.
quelle
"
sJavaScript,
21151312 Bytes"((\\?.)*?)"
Der Inhalt der Zeichenfolge befindet sich in Gruppe 1.
quelle