1

私の問題を短いタイトルで説明する方法がよくわからないので、この質問のタイトルが少し誤解を招くものであれば申し訳ありません. しかし、私が探しているものが何と呼ばれているのか、それが可能かどうかさえ本当にわかりません。

正規表現を使用して、HTML の一連の一致するタグの間のすべてを見つけようとしています。静的タグでテストしていたとき、これは簡単でした。\{myTag\}(someExpression)\{\/myTag\}

私の問題は、「myTag」が何でもかまいません。そのテキストが変数の場合、開始タグと終了タグを一致させる方法 (またはそれが可能かどうか) がわかりません。

以前、正規表現でドル記号と数字を使用できる参照システムを見たことがあると思いましたが、これを検索自体で使用できるかどうかはわかりません。

私は当初、おそらく次のようなものを書くことができると思っていました:\{(.*?)\}(someExpression)\{\/${1}\}しかし、これが実際に機能するかどうか、または可能かどうかはわかりません (正しいかどうかは言うまでもありません)。

質問の仕方がよくわからないので、この質問が理にかなっていることを願っています。主な理由は、私が言ったように、これに名前があるかどうか、可能かどうかわからないためです。また、私は正規表現の初心者でもあります。

そして、それが違いを生む場合、私がこれを行っている言語はpreg_replace_callback関数を使用したPHPです。

どんな助けでも大歓迎です。

4

2 に答える 2

2

これを試して:

\{([^}]*)\}(someExpression)\{\/\1\}

ただし、終了タグも一致しないようにする必要があることに注意してくださいsomeExpression(たとえば、一致します.*)。もちろん、タグがネストされている場合は、すべての賭けがオフになり、別の正規表現 (またはパーサー) が必要になります。

于 2011-05-03T06:29:57.897 に答える
0

それはあなたのケースに依存します。それが単なる HTML スニペットであり、HTML を検索できる特定のパターンがあることがわかっている場合は、正規表現を使用してパターンを見つけて置き換えることができますが、HTML を解析しようとしているように思えます。したがって、ネストされたタグがある場合に問題が発生します。http://php.net/manual/en/function.preg-replace.phpを確認してください。これは、コールバックを使用する関数よりもはるかに簡単に使用できるように思われるためです。

正規表現のルックバックに関する注意として、使用している言語に応じて $i または \i を使用できます。PHP 正規表現がグループ ルックバックのキャプチャをサポートしているかどうかはわかりません。

于 2011-05-03T06:43:42.250 に答える