Совпадение с неравным количеством escape-символов
-
03-07-2019 - |
Вопрос
Мне нужно сопоставить операторы препроцессора 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, но я буду признателен за ответы на любом регулярном языке Regex.)
Решение
Я думаю, ты делаешь это сложнее, чем нужно. Попробуйте это:
/
(?<!\\) # not preceded by a backslash
(?:\\\\)* # zero or more escaped backslashes
\\ \n # single backslash and linefeed
/x
Не связан с StackOverflow