質問
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
(PCREルールが適用されるようにPHPを使用していますが、 any 正規表現の用語に感謝します。)
解決
必要以上に難しくしていると思います。これを試してください:
/
(?<!\\) # not preceded by a backslash
(?:\\\\)* # zero or more escaped backslashes
\\ \n # single backslash and linefeed
/x
所属していません StackOverflow