PHP Expresión regular: coincidir con cualquier cosa (incluyendo espacios en blanco)
-
18-09-2019 - |
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
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\}/