匹配不均匀的转义符号数

Kon*_*lph 3 regex backreference pcre

我需要匹配C++预处理器语句.现在,预处理程序语句可能跨越多行:

#define foobar \
    "something glorious"
Run Code Online (Sandbox Code Playgroud)

最终的反斜杠可能会被转义,因此以下结果分为两行:

#define foobar \\
No longer in preprocessor.
Run Code Online (Sandbox Code Playgroud)

问题是如何有效地匹配显式的行继续.我有以下表达式,我认为有效.基本上,它测试反斜杠的数量是否是奇数.它是否正确?可以更有效地完成吗?

/
    [^\\]           # 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
Run Code Online (Sandbox Code Playgroud)

(我正在使用PHP,所以PCRE规则适用,但我会欣赏任何正则表达式的答案.)

Ala*_*ore 5

我认为你使它变得比它需要的更困难.试试这个:

/
  (?<!\\)    # not preceded by a backslash
  (?:\\\\)*  # zero or more escaped backslashes
  \\ \n      # single backslash and linefeed
/x
Run Code Online (Sandbox Code Playgroud)