3

C++プリプロセッサステートメントと一致させる必要があります。現在、プリプロセッサステートメントは複数の行にまたがることがあります。

#define foobar \
    "something glorious"

この最後の円記号はエスケープされる可能性があるため、次のように2つの別々の行になります。

#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 に答える