3

我需要匹配 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 规则适用,但我会很感激任何正则表达式白话的答案。)

4

1 回答 1

5

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

/
  (?<!\\)    # not preceded by a backslash
  (?:\\\\)*  # zero or more escaped backslashes
  \\ \n      # single backslash and linefeed
/x
于 2009-05-03T13:55:55.267 回答