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:
$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.
$regexp = '/(?:<td class=\"value\" id=\"players\">)<td class="value" id="players">(.+)(?:\ <\/td>/)';
Resultado: Array ( )
Prueba esto para ver el array entero:
print_r($matches);
Así lo he hecho sin regexp:
$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;
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.
$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.
Joder y yo que me estaba matando para lograr el array correcto.
$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;
$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