preg_match para etiquetas html anidadas
-
07-07-2019 - |
Pregunta
Me gustaría atrapar todo " dev " etiquetas y su contenido respectivo, a través de php preg_match_all()
pero no puede obtener las anidadas.
data:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
mi expresión hasta ahora:
|<dev>(.*)</dev>|Uis
gracias, por tu ayuda, b.
Solución
Don & # 8217; t usa expresiones regulares para analizar. Utilice un analizador real como DOMDocument o SimpleXML :
$xml = simplexml_load_string('<root>'.$str.'</root>');
Otros consejos
Debe tener un patrón de coincidencia recursivo:
/<dev>(.*|(?R))<\/dev>/i
Eso solo absorberá los elementos anidados, por lo que si desea analizarlos, deberá ejecutar la función nuevamente en $ coincidencias [1]
El *
es un operador codicioso, consume tantos caracteres como sea posible. En su lugar, debe usar la versión *?
no codiciosa para encontrar las coincidencias más pequeñas posibles. Tal vez las expresiones regulares no son las mejores herramientas para hacer esto.