Wer passt ungerade Anzahl von Fluchtsymbolen
-
03-07-2019 - |
Frage
Ich brauche C ++ Präprozessoranweisungen übereinstimmen. Nun Präprozessoranweisungen können mehrere Zeilen umfassen:
#define foobar \
"something glorious"
Dieser letzte Backslash so die folgenden Ergebnisse in zwei getrennten Linien entwertet werden kann:
#define foobar \\
No longer in preprocessor.
Die Frage ist, wie kann ich effizient die expliziten Linienfortsetzungs entspricht. Ich habe den folgenden Ausdruck, I denken funktioniert. Grundsätzlich prüft sie, ob die Anzahl der Schrägstriche ungerade ist. Ist das richtig? Kann es effizient durchgeführt werden mehr?
/
[^\\] # Something that's not an escape character, followed by …
(?<escape>\\*?) # … any number of escapes, …
(?P=escape) # … twice (i.e. an even number).
\\ \n # Finally, a backslash and newline.
/x
(Ich verwende PHP so PCRE Regeln gelten aber ich würde schätzen Antworten in jeder Regex Mundart.)
Lösung
Ich glaube, Sie machen es schwieriger, als es sein muss. Versuchen Sie folgendes:
/
(?<!\\) # not preceded by a backslash
(?:\\\\)* # zero or more escaped backslashes
\\ \n # single backslash and linefeed
/x
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow