0
text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text

上記の文字列から2つの別々の結果を取得する必要があります:
1。

{test}
    content
    content
    content
{/test}

2.2。

    content
    content
    content

したがって、上記の2つの結果を取得するには、PHPの2つの別個の正規表現パターンをどのようにする必要がありますか

4

2 に答える 2

3

このようなものはどうですか:

$str = <<<STR
text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text
STR;

$m = array();
if (preg_match('#\{([a-zA-Z]+)\}(.*?)\{/\1\}#ism', $str, $m)) {
    var_dump($m);
}

これはこの種の出力を取得します:

array
  0 => string '{test}
    content
    content
    content
{/test}' (length=50)
  1 => string 'test' (length=4)
  2 => string '
    content
    content
    content
' (length=37)

したがって、$m[0]一致する文字列全体(つまり、タグ+コンテンツ)があり$m[2]、タグ間のコンテンツのみが必要です。

特に""ではなく、"generic"タグを使用していることに注意してくださいtesttest" "タグしかない場合は、これを変更できます。

詳細については、少なくとも以下をご覧ください。

于 2009-12-09T05:44:39.270 に答える
1

タグとコンテンツを一緒にキャプチャするには:

/(\{test\}[^\x00]*?\{\/test\})/

内容だけをキャプチャするには:

/\{test\}([^\x00]*?)\{\/test\}/
于 2009-12-09T05:41:44.487 に答える