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

Foi útil?

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
scroll top