質問

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top