Question

Je dois faire correspondre les instructions du préprocesseur C ++. Désormais, les instructions du préprocesseur peuvent s'étendre sur plusieurs lignes:

#define foobar \
    "something glorious"

Cette dernière barre oblique inverse peut être échappée. Les résultats suivants apparaissent sur deux lignes distinctes:

#define foobar \\
No longer in preprocessor.

La question est de savoir comment associer efficacement la continuation de ligne explicite. J'ai l'expression suivante qui pense que fonctionne. Fondamentalement, il vérifie si le nombre de barres obliques inverses est impair. Est-ce correct? Peut-on le faire plus efficacement?

/
    [^\\]           # 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

(J'utilise PHP, donc les règles PCRE s'appliquent, mais j'apprécierais les réponses dans toutes les expressions vernaculaires Regex.)

Était-ce utile?

La solution

Je pense que vous rendez la tâche plus difficile que nécessaire. Essayez ceci:

/
  (?<!\\)    # not preceded by a backslash
  (?:\\\\)*  # zero or more escaped backslashes
  \\ \n      # single backslash and linefeed
/x
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top