0

まず、はい、HTML の解析に正規表現を使用してはならないことはわかっていますが、この状況では、長いテキスト文字列 (実際には var_dump() の出力) を取得し、いくつかの正規表現を使用して XHTML に変換しているので、私が扱うタグを正確に知っています。シーケンスの最後の 2 つの正規表現は、中かっこを探し、XHTML の断片に変換します。<var></var>前の正規表現でタグの間に出力している中括弧が文字列変数に含まれている場合を除いて、うまく機能します。

だから、現在、私は使用しています: /\s*{\s*/u. <var></var>私がする必要があるのは、タグ内の任意の中括弧を無視するようにこれを調整することです。

私は使用してみました:/\s*{\s*(?!(?<!<var>)[^\{]*<\/var>)/uしかし、それは正しくありません。正しく動作しない条件が何であるかをまだ特定していません。したがって、私はこの正規表現に近いかもしれませんし、そうでないかもしれません。したがって、SOの専門知識が必要です。ありがとうございました。

また、これが単に不可能な場合は、私ができる他のハックがあります。つまり、文字列を base64_encode() して<var></var>タグに貼り付け、最後の正規表現として base64_decode()<var></var>タグで囲まれたものです。私は使用可能な正規表現を見つけたいと思っています。さらに重要なのは、それが可能かどうかということです。

4

1 に答える 1

3

これはうまくいくかもしれません

\s*{\s*(?:(?!(?:.*?</var>))|(?=[^<]+<var>))

かなり、私は質問を言い換えました: 内の中括弧を一致させない代わりに、<var>外であることが証明できる中括弧のみを一致させます<var>。したがって、中括弧は<var>ifの外にあります。

  1. これは真であると断言できます: 、これは否定的な先読みを使用して、終了タグに(?!(?:.*?</var>))ヒットしないようにするか、または</var>
  2. これは true:(?=[^<]+<var>)であると断言できます。これは、正の先読みを使用して、最終的にどこかで開始<var>タグにヒットすることを保証します。

ネストされたタグでは間違いなく失敗し<var>ますが、使用したテスト ケースではうまくいくようです。RegExrで実行して、感想を教えてください。

于 2012-07-12T19:56:25.730 に答える