PHP регулярное выражение для захвата числа из таблицы и загрузки в переменную - PullRequest
0 голосов
/ 17 сентября 2009

Итак, вот строка, которая очищает страницу для чтения (с помощью файла получить содержимое)

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

Как я могу перейти к указанному выше разделу содержимого страницы, а затем выделить 4 751 внутри вышеупомянутого html и загрузить его в $ kills?

Сложность: номер будет меняться и иметь дополнительные цифры перед запятой

Ответы [ 6 ]

1 голос
/ 17 сентября 2009

Хорошо, получилось, убрав все пробелы и превратив содержимое страницы в строку

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

Возвращает

Array ( [0] => Array ( [0] => Kills (K)4,751  [1] => Deaths (D)4,868  ) [1] => Array ( [0] => 4,751 [1] => 4,868 ) ) 
0 голосов
/ 17 сентября 2009
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);

Теперь скажи мне, что не очень, круто, круто.

0 голосов
/ 17 сентября 2009
preg_match_all('#\(K\).*?<strong>(.*?)</strong>#s',$html,$matches);

скажи мне, что не очень

0 голосов
/ 17 сентября 2009

Это то, что я использую, и код gnarf возвращает 0

RageZ вернул пустой массив

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

0 голосов
/ 17 сентября 2009

Это должно сделать это:

if (preg_match("/<th>Kills \(K\)<\/th><td><strong>([\d,]+)<\/strong>/", 
               $string, $matches)) {
  $kills = str_replace(",","",$matches[1]);
} else {
  $kills = 0;
}
0 голосов
/ 17 сентября 2009

здесь вы идете

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

но на вашем месте я бы использовал xpath это безопаснее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...