1

PHP の正規表現の用語の動的部分の代わりに参照できることはわかっています。

preg_replace('/(test1)(test2)(test3)/',"$3$2$1",$string);

(どういうわけか、これが正しいかどうかはわかりませんが、探しているものではありません)

次のように、正規表現でそれが必要です。

preg_match_all("~<(.*)>.*</$1>~",$string,$matches);

「<」と「>」の間の最初の部分は動的です (したがって、html に存在するすべてのタグと独自の xml タグを見つけることができます) ので、同じ正規表現用語で再度参照したいと思います。

しかし、それは私にはうまくいきません。これは可能ですか?PHP 5.3のサーバーがあります

/編集:

私の最終的な目標はこれです:

たとえば、次のソースコードを含む html ページがある場合: HTML

<html>
  <head>
    <title>Titel</title>
  </head>
  <body>
    <div>
      <p>
        p-test<br />
        br-test
      </p>
      <div>
        <p>
          div-p-test
        </p>
      </div>
    </div>
  </body>
</html>

そして、処理後は次のようになります

$htmlArr = array(
    'html' => array(
            'head' => array('title' => 'Titel'),
            'body' => array(
                'div0' => array(
                    'p0' => 'p-test<br />br-test',
                    'div1' => array(
                        'p1' => 'div-p-test'
                    )
                )
            )
    ));
4

1 に答える 1

1

置換文字列のプレースホルダーは$1構文を使用します。\1正規表現自体では、それらは後方参照と呼ばれ、バックスラッシュと数字の構文に従います。
http://www.regular-expressions.info/brackets.html

だからあなたの場合:

preg_match_all("~<(.*?)>.*?</\\1>~",$string,$matches);

PHP 文字列ではバックスラッシュ自体がエスケープされるため、ここではバックスラッシュが 2 重になっています。(特に二重引用符で囲まれた文字列の場合、それ以外の場合は ASCII シンボルになります。)

于 2012-04-07T14:18:50.993 に答える