Писал парсер с сайта (wowhead)
наткнулся на такую проблему:
PHP:
скопировать код в буфер обмена
$spell_s='/\"id\"\:([0-9]+).\"learnedat\"\:([0-9]+).\"level\"\:([0-9]+),.*\"skill\"\:\[([0-9]+)\],.*,\"trainingcost\"\:([0-9]+)/';
выдаёт из множественного списка только первое значение. кроме последних двух (их он берёт с самой последней подходящей строки.
что я пробовал? заменял .* на [^{}]+ (в фигурных скобках заключены наборы значений), но безрезультатно. если сделать так:
то всё выводится.
полный код программы:
PHP:
скопировать код в буфер обмена
$host="http://www.wowhead.com/";
function select() // функция для обрезания нужного нам фрагмента из данной строки
{
global $start, $content;
$pos = strpos($content, $start); if ($pos) $content = substr($content, $pos); $pos = strpos($content, "}]});"); if ($pos) $content = substr($content, 0
, $pos); }
$npc_id=$_POST["id"];
// получаем содержимое страницы в виде строчки, для дальнейшей обработки и поиска
$page="npc=" . $npc_id;
// далее идёт обрезание строки
$start="new Listview({template: 'spell', id: 'teaches-recipe',";
select();
// ищем все заклинания
$spell_s='/\"id\"\:([0-9]+).\"learnedat\"\:([0-9]+).\"level\"\:([0-9]+),.*\"skill\"\:\[([0-9]+)\],.*,\"trainingcost\"\:([0-9]+)/';