Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: venadHD en 11 Abril 2015, 16:03



Título: [Problema / Duda] RegEXP
Publicado por: venadHD en 11 Abril 2015, 16:03
Hola de nuevo xD , la duda que me entró ahora y que me decidi a poner aqui (porque entiendo de p*** madre las cosas aqui) es sobre los RegExp en codigos fuente de paginas web, voy a exponer lo que trato de hacer:

Me fui a una pagina web, en concreto ( http://www.game-state.com/5.175.139.216:22050 ) y quise capturar algunos datos que figuran ahi a un script en PHP.

Lo que yo queria integrar, era esto:
<td class="value" id="players">1/128</td>

Lo intenté con el siguiente metodo, pero no funcionó, pienso que me falta algo:

Código
  1. $contenido = file_get_contents("http://www.game-state.com/5.175.139.216:22050");
  2. $regexp = '<td class="value" id="players">?(.+)(?:<\/td>)?';
  3. preg_match_all($regexp,$contenido,$matches);
  4. print_r($matches[1]);
  5. echo'ZONA TEST';

Esto puede ser algo mejor? Pero me sigue apareciente en blanco, es decir, nada.
Código
  1. $regexp = '/(?:<td class=\"value\" id=\"players\">)<td class="value" id="players">(.+)(?:\ <\/td>/)';

Resultado: Array ( )


Título: Re: [Problema / Duda] RegEXP
Publicado por: T. Collins en 11 Abril 2015, 16:39
Prueba esto para ver el array entero:
Código
  1. print_r($matches);

Así lo he hecho sin regexp:

Código
  1. $contenido = file_get_contents("http://www.game-state.com/5.175.139.216:22050");
  2.  
  3. $str = '<td class="value" id="players">';
  4. $start = strpos( $contenido, $str ) + strlen($str);
  5. $end = strpos( $contenido, "</td>", $start );
  6. $result = substr( $contenido, $start, $end-$start);
  7. echo $result;


Título: Re: [Problema / Duda] RegEXP
Publicado por: MinusFour en 11 Abril 2015, 16:51
Yo creo que seria mas facil si usaras el DOMDocument. De esta forma los contenedores pueden cambiar, las clases tambien pueden cambiar. Lo unico que no puede cambiar es la Id.
Código
  1. $contenido = file_get_contents("http://www.game-state.com/5.175.139.216:22050");
  2. $domDoc = new DOMDocument();
  3. @$domDoc->loadHTML($contenido);
  4. $elementId = $domDoc->getElementById('players');
  5. $text = $elementId->nodeValue; // 2/128

Claro que tiene sus desventajas. Es mucho mas lento que un simple strpos. Y posiblemente mas lento que regex. Pero es mucho mas manejable.


Título: Re: [Problema / Duda] RegEXP
Publicado por: venadHD en 11 Abril 2015, 16:55
Joder y yo que me estaba matando para lograr el array correcto.

Código
  1. $contenido = file_get_contents("http://www.game-state.com/5.175.139.216:22050");
  2. $regexp = '/(.+)/';
  3. preg_match_all($regexp,$contenido,$matches);
  4. print_r($matches[1][142]);

Intentare aprenderme eso de strpos y substr, recien aprendo PHP desde ayer
Gracias por la ayuda
EDIT: Creo que lo entendí bien;
Código
  1. $str = '<td class="value" id="players">'; //string a buscar inicialmente
  2. echo"$str <br>";
  3. $start = strpos( $contenido, $str ) + strlen($str); //encontrarla en formato numerico
  4. echo"$start <br>";
  5. $end = strpos( $contenido, "</td>", $start ); //encontrar donde quiero que acabe a partir de $start en formato numerico
  6. echo"$end <br>";
  7. $result = substr( $contenido, $start, $end-$start); //extraer texto a partir de una posicion inicial numerica proporcionada por $start y el numero de caracteres definido por la resta de $end - $start = 5