Tablodan sayıda yakalamak ve değişkene yüklemek için düzenli ifade php

6 Cevap php

Yani burada (dosya içeriğini almak kullanarak) okumak için bir sayfa kazıma im dizedir

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

Nasıl sayfa içeriğinin yukarıdaki bölümüne gidin ve daha sonra yukarıdaki html içinde 4751 yalıtmak ve $ öldürür içine yükleyin?

Difficulty: the number will change and have additional numbers before the comma

6 Cevap

Tamam bütün boşlukları kaldırarak ve bir dizeye sayfa içeriğini çevirerek çalışmak var

<?
$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); 
?>

Bu döner

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

Bu yapmak gerekir:

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

Bu ne im kullanarak ve Gnarf kodu döndürür 0'dır

RageZ ait boş bir dizi döndü

<?
$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;

?>

0 geliyor

Buraya gitmek

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

ama yerinde olsam xpath daha güvenli mi kullanmak istiyorsunuz.

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

o güzel değildir söyle

preg_match('#<table class="tbl_profile">(.*?)</table>#s',file_get_contents('http://combatarms.nexon.net/Community/Profile.aspx?user=tect0n'),$m);
preg_match_all('#<tr>.*?<t.*?>(.*?)</t.*?>.*?<t.*?>(.*?)</t.*?>.*?<t.*?>(.*?)</t.*?>.*?</tr>#s',preg_replace('#(<strong>)|(</strong>)|(<!--.*?-->)#s','',$m[1]),$r);
echo 'You got '.$r[2][1].' killz';
//print_r($r);

Şimdi cooooool, güzel değildir thaaaaaaat söyle.