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

Cita:
Iniciado por abimaelrc Ver Mensaje
la practica, practica, practica te ayudará a comprender mejor las expresiones regulares.
Casi lo tengo, estoy muy contento con mis avances en las expresiones regulares xDDD

Modifiqué el patrón hasta poder conseguir separar los CLASS por un lado y los ID por otro. Puse robustez en el hecho que estos elementos pueden aparecer con comillas dobles o simples.

El problema que no he conseguido solucionar, es la disyunción de CLASS e ID. Falla cuando aparecen los dos en la misma linea, no coge ambos.

EJEMPLO de linea
<input type="text" name="user" id="user_login" class="neodani" value="" size="20" tabindex="1" accesskey="1"/></label>


SCRIPT
Código PHP:
Ver original
  1. $html='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
  3. <head>
  4.     <title>Área restringida | Panel de Administración</title>
  5.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  6.     <meta name="robots" content="noindex,nofollow"/>
  7.     <link rel="stylesheet" href="/css/entrada_login.css" type="text/css" media="all" />
  8.     <!-- Favicon -->
  9.     <link rel="shortcut icon" href="/imagenes/favicon.ico"/>
  10. </head>
  11. <body class="login2">
  12.     <p id="borde-top"><a class="enlace_top" href="entrada_login.php" title="Panel de Administración">ATENCIÓN: Área privada.</a></p>
  13.     <!-- Formulario Entrada -->
  14.     <div id="login">
  15.         <h1 id="titulo" title="Panel de Administración"></h1>
  16.  
  17.         <form id="loginform" action="includes/login.php" method="post">
  18.             <p>
  19.                 <label>Nombre de usuario<br />
  20.                 <input type="text" name="user" id="user_login" class="neodani" value="" size="20" tabindex="1" accesskey="1"/></label>
  21.             </p>
  22.             <p>
  23.                 <label class="prueba">Contraseña<br />
  24.                 <input type="password" name="password" id="user_pass" class="input" value="" size="20" tabindex="2" accesskey="2" /></label>
  25.             </p>
  26.             <p class="forgetmenot"><label><input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="90" /> Recordarme</label></p>
  27.             <p class="submit">
  28.                 <input type="submit" name="wp-submit" id="wp-submit" value="Iniciar Sesión" tabindex="100" />
  29.             </p>
  30.         </form>
  31.         <p id="nav">
  32.             <a class="footer" href="#">Área privada.</a>
  33.         </p>
  34.     </div>
  35.     </body>
  36. </html>
  37. ';
  38.  
  39. function Extraer_Class_ID($html){
  40.     $clases = array();
  41.     $id = array();
  42.    
  43.     preg_match_all('/<(a|p|form|h1|label|input|div|body)[^>](?:(class)=["|\'](.*?)["|\'])|(?:(id)=["|\'](.*?)["|\'])[^>]*>/is',$html,$matches);
  44.    
  45.     //eliminamos los repetidos
  46.     $clases=array_unique($matches[3]);
  47.     $id=array_unique($matches[5]);
  48.    
  49.     //Quedara un valor en cada array en blanco, lo eliminamos así
  50.     foreach($clases as $item)
  51.     {
  52.         if ($item!=''){$resultado_class[] = $item;} // eliminamos los blancos
  53.     }
  54.     foreach($id as $item)
  55.     {
  56.         if ($item!=''){$resultado_id[] = $item;} // eliminamos los blancos
  57.     }
  58.    
  59.     return array($resultado_id,$resultado_class);
  60. }
  61.  
  62.  
  63. // Llamada del script
  64. $estilo=Extraer_Class_ID($html);
  65. echo "<pre>";
  66. echo "ID<br/>";
  67. print_r($estilo[0]);
  68. echo "<br/>CLASES<br/>";
  69. print_r($estilo[1]);
  70. echo "</pre>";
  71. ?>


Salida

Código:
ID
Array
(
    [0] => borde-top
    [1] => login
    [2] => titulo
    [3] => loginform
    [4] => user_login
    [5] => user_pass
    [6] => rememberme
    [7] => wp-submit
    [8] => nav
)

CLASES
Array
(
    [0] => login2
    [1] => enlace_top
    [2] => prueba
    [3] => forgetmenot
    [4] => submit
    [5] => footer
)
Sabéis como puedo hacer para que detecte los dos cuando aparecen dentro del mismo tag html?

Gracias de antemano!