PHP expressão regular: corresponder a tudo (incluindo espaços em branco)
-
18-09-2019 - |
Pergunta
text text text
text text text
{test}
content
content
content
{/test}
text text text
text text text
i precisa obter dois resultados separados da corda acima:
1.
{test}
content
content
content
{/test}
2.
content
content
content
afirmativo, quais devem ser os dois padrões distintos expressões regulares PHP para obter a acima de dois resultados
Solução
Que tal algo como isto:
$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);
}
O que vai ter este tipo de saída:
array
0 => string '{test}
content
content
content
{/test}' (length=50)
1 => string 'test' (length=4)
2 => string '
content
content
content
' (length=37)
Assim, em $m[0]
você tem todo o texto correspondente (ie etiquetas + conteúdo) , e em $m[2]
você só tem de conteúdo entre as tags.
Nota eu usei tags "genéricos", e não especificamente "test
"; você pode mudar isso, se você só tem "test
" tags.
Para mais informações, você pode dar uma olhada em, pelo menos:
Outras dicas
Para capturar as tags e conteúdo juntos:
/(\{test\}[^\x00]*?\{\/test\})/
Para capturar apenas o conteúdo:
/\{test\}([^\x00]*?)\{\/test\}/
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow