Мне нужно сопоставить операторы препроцессора C ++. Теперь операторы препроцессора могут занимать несколько строк:
#define foobar \
"something glorious"
Эта последняя обратная косая черта может быть экранирована, поэтому следующие результаты в двух отдельных строках:
#define foobar \\
No longer in preprocessor.
Вопрос в том, как мне эффективно сопоставить явное продолжение строки. У меня есть следующее выражение, которое я думаю работает. По сути, он проверяет, является ли количество обратных косых черт нечетным. Это правильно? Можно ли сделать это более эффективно?
/
[^\\] # 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
(Я использую PHP, поэтому применяются правила PCRE, но я был бы признателен за ответы в any Regex vernacular.)