2017-01-14 3 views
0

Ich habe durch andere Fragen regex gesucht, aber konnte keine Antwort finden. Ich arbeite an einer Grammatik in ANTLR4 und es gibt einen regulären Ausdruck, der mir entgangen ist.erlauben nur bestimmte Escape-Zeichen im regulären Ausdruck

Ich versuche, alle Zeichen übereinstimmen, außer für durch irgendetwas anderes als [btnrf"\] gefolgt \.

Ich habe versucht, (~([\\][.]) | [\\][btnrf"\]), aber die ~ negiert nur ein einzelnes Zeichen so weit ich kann sagen. Ich erhalte den Fehler:

error AC0050: extraneous input '[.]' expecting RPAREN while looking for lexer rule element

Es scheint, wie es nicht allzu schwer sein sollte \* ausschließen, aber der kleine Liste akzeptabler Escape-Zeichen ermöglichen. Ich war auf http://www.regex101.com und ich habe keine Probleme mit den zulässigen Zeichen, aber aus irgendeinem Grund kann ich einfach nicht herausfinden, wie neben den oben genannten Escape-Zeichen zu verbieten, während auch alle anderen Zeichen erlaubt.

Manuelles Angeben jedes gültigen Eingabezeichens scheint übertrieben zu sein, aber darauf kommt es an. Etwas wie:

[[email protected]#$%^&*()\-+=/.,<>;':\b\t\n\r\f\"\\]*

Das ist nicht 100% gültig sein kann, aber die Idee ist die Auflistung nur alle gültigen möglichen Zeichen, die standardmäßig alle ungültigen Escape-Zeichen ausschließen würde. Es scheint, als sollte es einen einfacheren Weg geben. Alle Tipps oder Links zu nützlichen Informationen würden sehr geschätzt.

Die eigentliche Regel, die ich bisher habe, was alles in doppelten Anführungszeichen als gültige Zeichenfolge eingeschlossen erlaubt:

STRING : '"' (~[\"] | '\\"')* '"'; 
+0

Was ich nicht verstehe, ist, welche Charaktere versuchst du zu negieren? –

+0

Ich versuche, alle regulären Zeichen zuzulassen und verbiete alle Zeichen außer den genannten. Also sind '\ t' oder' \ "' gültig, aber '\ u' ist nicht. –

Antwort

1

Ich habe keine ANTLR praktisch, aber die folgenden scheint zu tun, was du bist nach:

\([^\\].\)\|\(\\[btnrf\\"\\\\]\) 

so effektiv erlauben „ENTWEDER etwas anderes als ein umgekehrter Schrägstrich ein beliebiges Zeichen folgt, oder eine von einem bestimmten Zeichen folgt Backslash“.

zB die Zeichenfolge in einer Datei regexfile setzen, und eine Daten-Datei

\a 
\b 
\\ 
xy 

dann grep -f regexfile datafile die \ a und Rückkehr ausschließen Durchführung enthält gegeben:

\b 
\\ 
xy 
+0

ach, das ist genau das, was ich gesucht habe. Ich muss es nur ein bisschen in ANTLR Syntax ändern, und sollte es sein gut zu gehen, danke! –

+0

ein kleines Problem, das ich lief, doppelte Anführungszeichen sind nicht legal UNLESS von einem Backslash vorangegangen. Ich habe versucht, '[^"] 'anstelle der'. ', aber es scheint nicht zu sein funktioniert richtig –