2009-09-17 3 views
0

Voici donc la chaîne qui im ​​racler une page à lire (à l'aide obtenir le contenu fichier)php expression régulière pour capturer le numéro de la table et de la charge dans la variable

<th>Kills (K)</th><td><strong>4,751</strong></td><td><strong>0</strong></td> 

Comment puis-je accéder à la section ci-dessus de la contenu de la page, puis isoler le 4 751 dans le code HTML ci-dessus et le charger dans $ kills?

Difficulté: le nombre va changer et avoir des numéros supplémentaires avant la virgule

+1

Je ne suis pas bon en regex, mais vous pouvez l'inclure dans un tag racine et l'analyser en XML en utilisant simplexml. – Amarghosh

+4

+1 préfère une approche DOM ou simplexml moins douteuse – RageZ

+0

Je vais essayer, im très familier avec simplexml. – mrpatg

Répondre

1

Ok le faire fonctionner en supprimant tous les espaces et en tournant le contenu de la page dans une chaîne

<? 
$url = "http://combatarms.nexon.net/Community/Profile.aspx?user=tect0n"; 
$raw = file_get_contents($url); 
$newlines = array("\t","\n","\r","\x20\x20","\0","\x0B"); 
$content = str_replace($newlines, "", html_entity_decode($raw)); 
preg_match_all('|<th>.*?</th><td><strong>(\d+,\d+)</strong></td>|', $content,$match); 
?> 

Ce retour

Array ([0] => Array ([0] => Kills (K)4,751 [1] => Deaths (D)4,868 ) [1] => Array ([0] => 4,751 [1] => 4,868)) 
0

ici vous allez

preg_match_all('|<th>.*?</th><td><strong>([\d,]+)</strong></td>|x', $subject,$match); 
var_dump($match); 

mais si je vous j'utiliserais xpath c'est est plus sûr.

+0

à l'intérieur des étiquettes th, puis-je changer cela pour sélectionner des lignes différentes? Ou est-ce que cela va briser tout le shabang? Comme s'il y avait une rangée pour Kills, et une pour Deaths – mrpatg

+0

ouais le. *? correspondrait à tout texte ... juste égalerait bla plusieurs ... mis comme je l'ai dit que vous avez sans doute mieux d'aller sur la direction de XPath moins de code et l'erreur moins possible – RageZ

+0

cela fonctionnera si il y a des onglets ou des espaces entre les balises html? – mrpatg

0

Cela devrait le faire:

if (preg_match("/<th>Kills \(K\)<\/th><td><strong>([\d,]+)<\/strong>/", 
       $string, $matches)) { 
    $kills = str_replace(",","",$matches[1]); 
} else { 
    $kills = 0; 
} 
+0

devrait utiliser correspondre tout ce que je suppose qu'il a beaucoup de lignes à lire ... – RageZ

0

C'est ce que im en utilisant et le code Gnarf retourne 0

RageZ de retour un tableau vide

<? 
$string = file_get_contents("http://combatarms.nexon.net/Community/Profile.aspx?user=tect0n"); 


if (preg_match("/<th>Kills \(K\)<\/th><td><strong>([\d,]+)<\/strong>/", 
       $string, $matches)) { 
    $kills = str_replace(",","",$matches[1]); 
} else { 
    $kills = 0; 
} 
echo $kills; 

?> 

À venir 0

+0

laissez-moi vérifier ... mon exp exp – RageZ

+0

juste vérifié le travail ... – RageZ

+0

soit ce que le travail tue (K)4.751'; preg_match_all ('| *(\ d +, \ d +) |.?, $ Subject, $ match); var_dump ($ match); résultat: array (2) {[0] => array (1) {[0] => chaîne (49) "Kills (K) 4,751"} [1] => array (1) {[0 ] => string (5) "4,751"}} – RageZ

0
preg_match_all('#\(K\).*?<strong>(.*?)</strong>#s',$html,$matches); 

me disent que aint assez

0

me dire maintenant thaaaaaaat aint jolie, cooooool il.

Questions connexes