Corrisponde al numero irregolare di simboli di escape
-
03-07-2019 - |
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.)
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