Frage

text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text

Ich brauche zwei getrennte Ergebnisse aus der obigen Zeichenfolge zu erhalten:
1.

{test}
    content
    content
    content
{/test}

2.

    content
    content
    content

so, was soll die beiden separaten regulären Ausdruck Muster PHP sein, um die beiden oben genannten Ergebnisse zu erhalten

War es hilfreich?

Lösung

Was ist so etwas wie folgt aus:

$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);
}

, die diese Art von Ausgabe bekommen:

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

Also, in $m[0] Sie haben den ganzen gefundenen String (dh Tags + Inhalt) , und in $m[2] Sie nur zum Inhalt zwischen den Tags haben.

Hinweis I "generic" Tags verwendet haben, und nicht speziell "test"; Sie können das ändern, wenn Sie nur „test“ Tags haben.

Für weitere Informationen können Sie auf einen Blick, mindestens:

Andere Tipps

So erfassen die Tags und Inhalt zusammen:

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

So erfassen nur den Inhalt:

/\{test\}([^\x00]*?)\{\/test\}/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top