Pregunta

text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text

i necesidad de obtener dos resultados separados de la cadena anterior:
1.

{test}
    content
    content
    content
{/test}

2.

    content
    content
    content

es así, cuáles deben ser los dos separados patrones de expresiones regulares PHP para obtener los dos resultados anteriores

¿Fue útil?

Solución

¿Qué pasa algo como esto:

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

¿Qué va a obtener este tipo de salida:

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

Por lo tanto, en $m[0] tienes toda la cadena coincidente (es decir, las etiquetas + contenido) , y en $m[2] es suficiente con contenido entre las etiquetas.

Tenga en cuenta que he utilizado etiquetas "genéricas", y no específicamente "test"; usted puede cambiar eso si usted sólo tiene etiquetas "test".

Para más información, se puede echar un vistazo a, al menos:

Otros consejos

Para capturar las etiquetas y contenidos juntos:

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

Para capturar sólo el contenido:

/\{test\}([^\x00]*?)\{\/test\}/
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top