Domanda

Devo abbinare le dichiarazioni del preprocessore C ++. Ora, le istruzioni del preprocessore possono estendersi su più righe:

#define foobar \
    "something glorious"

Questa barra rovesciata finale può essere sfuggita, pertanto i seguenti risultati si dividono in due righe separate:

#define foobar \\
No longer in preprocessor.

La domanda è come posso abbinare in modo efficiente la continuazione esplicita della linea. Ho la seguente espressione che penso funziona. Fondamentalmente, verifica se il numero di barre rovesciate è dispari. È corretto? Può essere fatto in modo più efficiente?

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

(Sto usando PHP in modo da applicare le regole PCRE ma apprezzerei le risposte in qualsiasi vernacolo Regex.)

È stato utile?

Soluzione

Penso che tu lo stia rendendo più difficile di quanto debba essere. Prova questo:

/
  (?<!\\)    # not preceded by a backslash
  (?:\\\\)*  # zero or more escaped backslashes
  \\ \n      # single backslash and linefeed
/x
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top