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.)

War es hilfreich?

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
scroll top