Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/01/2010, 12:40
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Encontrar etiquetas html, class y id's (con expresiones regulares)

Buenas,

Estoy intentando armar unas expresiones regulares capaces de printar todas las etiquetas html diferentes, clases y id's (de estilo) que encuentre.

Ejemplo:

Código PHP:
Ver original
  1. <?
  2. /* SACAR TODAS LAS ETIQUETAS, ID Y CLASES DEL ESTILO CSS */
  3. $html='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
  5. <head>
  6.     <title>Área restringida | Panel de Administración</title>
  7.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  8.     <meta name="robots" content="noindex,nofollow"/>
  9.     <link rel="stylesheet" href="/css/entrada_login.css" type="text/css" media="all" />
  10.     <!-- Favicon -->
  11.     <link rel="shortcut icon" href="/imagenes/favicon.ico"/>
  12. </head>
  13. <body class="login">
  14.     <p id="borde-top"><a class="enlace_top" href="entrada_login.php" title="Panel de Administración">ATENCIÓN: Área privada.</a></p>
  15.     <!-- Formulario Entrada -->
  16.     <div id="login">
  17.         <h1 id="titulo" title="Panel de Administración"></h1>
  18.  
  19.         <form id="loginform" action="includes/login.php" method="post">
  20.             <p>
  21.                 <label>Nombre de usuario<br />
  22.                 <input type="text" name="user" id="user_login" class="input" value="" size="20" tabindex="1" accesskey="1"/></label>
  23.             </p>
  24.             <p>
  25.                 <label>Contraseña<br />
  26.                 <input type="password" name="password" id="user_pass" class="input" value="" size="20" tabindex="2" accesskey="2" /></label>
  27.             </p>
  28.             <p class="forgetmenot"><label><input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="90" /> Recordarme</label></p>
  29.             <p class="submit">
  30.                 <input type="submit" name="wp-submit" id="wp-submit" value="Iniciar Sesión" tabindex="100" />
  31.             </p>
  32.         </form>
  33.         <p id="nav">
  34.             <a class="footer" href="#">Área privada.</a>
  35.         </p>
  36.     </div>
  37.     </body>
  38. </html>
  39. ';
  40.  
  41.  
  42. preg_match_all('/(<a.*?)class="(.*?)"/is',$html,$matches);
  43. print_r($matches);
  44. echo "<br/>";
  45. preg_match_all('/<h1.*?/is',$html,$matches);
  46. print_r($matches);
  47. ?>

No se bien bien como decirle que printe (solo una vez) todas las etiquetas distintas del codigo html que vaya encontrando
Ej.
body, p, form, h1,label, a

Y todas las class e id's

class="login"
id="login"
id="loginform"
id="borde-top"
id="nav"
class="submit"
class="footer"


Con la primera expresión regular obtengo esta salida
Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => enlace_top [1] => footer ) )

La cual ya no entiendo porque hay tantos arrays dentro de otros! esto pasa siempre?

Debería tener una array con todas las etiquetas que quiero que busque o las escribo directamente en la expresión regular?

PD: He mirado varias paginas de expresiones regulares sin éxito.
http://www.forosdelweb.com/f18/aport...s-pcre-646110/
http://www.ignside.net/man/php/regex.php

Gracias de antemano