Ver Mensaje Individual
  #6 (permalink)  
Antiguo 29/09/2009, 01:32
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Parseando XHTML con Expresiones regulares [Ayuda]

Pero en el ejemplo que me diste, segun lo que hice si salen todos. Trata el ejemplo que te di. Si tienes algun otro vamos modificandolo hasta que logre lo que quieres, pero ese ejemplo publica todos y ademas te trae la información como tu quieres.
Con este ejemplo
Código PHP:
Ver original
  1. <?php
  2. $s = '<html>
  3.        <head>
  4.                <title>XHTML</title>
  5.        </head>
  6.        <body>
  7.                <div id="container">
  8.                        <div id="c1"></div>
  9.                        <div id="c2"></div>
  10.                        <div id="c3"></div>
  11.                        <div id="c4"></div>
  12.                        <p class="neat">Lorem ipsum dolor sit amet... </p>
  13.                </div>
  14.        </body>
  15. </html>';
  16. $pattern = '/<([a-z0-9\-]+)([^>]*)>([^<]+)<\/+[a-z0-9\-]+>|<([a-z0-9\-]+)([^>]*)>/is';
  17. preg_match_all($pattern, $s, $m);
  18. print_r($m);
Fijate en el resultado
Código codigo:
Ver original
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => <html>
  6.             [1] => <head>
  7.             [2] => <title>XHTML</title>
  8.             [3] => <body>
  9.             [4] => <div id="container">
  10.             [5] => <div id="c1">
  11.             [6] => <div id="c2">
  12.             [7] => <div id="c3">
  13.             [8] => <div id="c4">
  14.             [9] => <p class="neat">Lorem ipsum dolor sit amet... </p>
  15.         )
  16.  
  17.     [1] => Array
  18.         (
  19.             [0] =>
  20.             [1] =>
  21.             [2] => title
  22.             [3] =>
  23.             [4] =>
  24.             [5] =>
  25.             [6] =>
  26.             [7] =>
  27.             [8] =>
  28.             [9] => p
  29.         )
  30.  
  31.     [2] => Array
  32.         (
  33.             [0] =>
  34.             [1] =>
  35.             [2] =>
  36.             [3] =>
  37.             [4] =>
  38.             [5] =>
  39.             [6] =>
  40.             [7] =>
  41.             [8] =>
  42.             [9] =>  class="neat"
  43.         )
  44.  
  45.     [3] => Array
  46.         (
  47.             [0] =>
  48.             [1] =>
  49.             [2] => XHTML
  50.             [3] =>
  51.             [4] =>
  52.             [5] =>
  53.             [6] =>
  54.             [7] =>
  55.             [8] =>
  56.             [9] => Lorem ipsum dolor sit amet...
  57.         )
  58.  
  59.     [4] => Array
  60.         (
  61.             [0] => html
  62.             [1] => head
  63.             [2] =>
  64.             [3] => body
  65.             [4] => div
  66.             [5] => div
  67.             [6] => div
  68.             [7] => div
  69.             [8] => div
  70.             [9] =>
  71.         )
  72.  
  73.     [5] => Array
  74.         (
  75.             [0] =>
  76.             [1] =>
  77.             [2] =>
  78.             [3] =>
  79.             [4] =>  id="container"
  80.             [5] =>  id="c1"
  81.             [6] =>  id="c2"
  82.             [7] =>  id="c3"
  83.             [8] =>  id="c4"
  84.             [9] =>
  85.         )
  86.  
  87. )

Te dice todos las etiquetas pero en dos partes una se encuentra en el [1] => Array y la otra esta en el [4] => Array
Tambien te dice los id y class pero en dos array uno se encuentra en el [2] => Array y el otro esta en el [5] => Array
Si los quieres unir puedes usar la funcion array_merge()
Código PHP:
Ver original
  1. <?php
  2. $s = '<html>
  3.        <head>
  4.                <title>XHTML</title>
  5.        </head>
  6.        <body>
  7.                <div id="container">
  8.                        <div id="c1"></div>
  9.                        <div id="c2"></div>
  10.                        <div id="c3"></div>
  11.                        <div id="c4"></div>
  12.                        <p class="neat">Lorem ipsum dolor sit amet... </p>
  13.                </div>
  14.        </body>
  15. </html>';
  16. $pattern = '/<([a-z0-9\-]+)([^>]*)>([^<]+)<\/+[a-z0-9\-]+>|<([a-z0-9\-]+)([^>]*)>/is';
  17. preg_match_all($pattern, $s, $m);
  18. print_r($m);
  19. $r = array_merge($m[1],$m[4]);
  20. print_r($r);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 29/09/2009 a las 01:56