Question

text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text

Je dois obtenir deux résultats séparés de la chaîne ci-dessus:
1.

{test}
    content
    content
    content
{/test}

2.

    content
    content
    content

, ce qui devrait être les deux motifs réguliers séparés expression PHP pour obtenir les deux résultats ci-dessus

Était-ce utile?

La solution

Qu'en est-il quelque chose comme ceci:

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

Ce qui va obtenir ce genre de sortie:

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

Ainsi, $m[0] vous avez toute la chaîne assortie (par exemple balises + contenu) , et $m[2] vous suffit de contenu entre les balises.

Notez que je l'ai utilisé des balises « génériques », et non spécifiquement « test »; vous pouvez changer que si vous avez seulement balises « test ».

Pour plus d'informations, vous pouvez jeter un oeil à, au moins:

Autres conseils

Pour capturer les balises et le contenu ensemble:

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

Pour capturer seulement le contenu:

/\{test\}([^\x00]*?)\{\/test\}/
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top