2011-07-31 17 views
9

¿Cómo puedo capturar todo el contenido dentro de la etiqueta <body> con expresiones regulares?¿Cómo puedo capturar todo el contenido dentro de la etiqueta `<body>` con regex?

Por ejemplo,

<html><body><p><a href="#">xx</a></p> 

<p><a href="#">xx</a></p></body></html> 

quiero devolver esto sólo,

<p><a href="#">xx</a></p> 

<p><a href="#">xx</a></p> 

o cualquier otra idea mejor? tal vez DOM pero tienen que utilizar saveHTML(); luego volverá doctype y body ... etiqueta

HTML Purifier es un dolor de usar por lo decido no utilizarlo. Pensé que la expresión regular podría ser la siguiente mejor opción para mi desastre.

+0

una expresión regular como éste no funciona para usted ' (. *)'? – sahid

+1

Eche un vistazo a esta publicación http://stackoverflow.com/questions/3577641/best-methods-to-parse-html-with-php/3577662#3577662 –

+0

@sahid - no, qué tal, ' ... ' –

Respuesta

20
preg_match("/<body[^>]*>(.*?)<\/body>/is", $html, $matches); 

$matches[1] será el contenido de la etiqueta del cuerpo

+0

¡Gracias Flambino! – laukok

+1

Consulte los ejemplos HTML válidos (!) En http://stackoverflow.com/questions/701166/can-you-provide-some-examples-of-why-it-is-hard-to-parse-xml-and- html-with-a-rege/702222 # 702222 y vea cómo falla con una expresión regular. – Shi

+0

genial flambino !! – JAF

1
preg_match("~<body.*?>(.*?)<\/body>~is", $html, $match); 
print_r($match); 
Cuestiones relacionadas