[Problema / Duda] RegEXP

Iniciado por venadHD, 11 Abril 2015, 16:03 PM

0 Miembros y 1 Visitante están viendo este tema.

venadHD

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 (php) [Seleccionar]
$contenido = file_get_contents("http://www.game-state.com/5.175.139.216:22050");
$regexp = '<td class="value" id="players">?(.+)(?:<\/td>)?';
preg_match_all($regexp,$contenido,$matches);
print_r($matches[1]);
echo'ZONA TEST';


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

Resultado: Array ( )

T. Collins

Prueba esto para ver el array entero:
Código (php) [Seleccionar]
print_r($matches);

Así lo he hecho sin regexp:

Código (php) [Seleccionar]
$contenido = file_get_contents("http://www.game-state.com/5.175.139.216:22050");

$str = '<td class="value" id="players">';
$start = strpos( $contenido, $str ) + strlen($str);
$end = strpos( $contenido, "</td>", $start );
$result = substr( $contenido, $start, $end-$start);
echo $result;

MinusFour

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 (php) [Seleccionar]

$contenido = file_get_contents("http://www.game-state.com/5.175.139.216:22050");
$domDoc = new DOMDocument();
@$domDoc->loadHTML($contenido);
$elementId = $domDoc->getElementById('players');
$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.

venadHD

#3
Joder y yo que me estaba matando para lograr el array correcto.

Código (php) [Seleccionar]
$contenido = file_get_contents("http://www.game-state.com/5.175.139.216:22050");
$regexp = '/(.+)/';
preg_match_all($regexp,$contenido,$matches);
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 (php) [Seleccionar]

$str = '<td class="value" id="players">'; //string a buscar inicialmente
echo"$str <br>";
$start = strpos( $contenido, $str ) + strlen($str); //encontrarla en formato numerico
echo"$start <br>";
$end = strpos( $contenido, "</td>", $start ); //encontrar donde quiero que acabe a partir de $start en formato numerico
echo"$end <br>";
$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