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ルールが適用されますが、正規表現での回答をいただければ幸いです。)