PHP RegularExpression: tout match (y compris les espaces blancs)
-
18-09-2019 - |
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
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\}/