|
 1.8 Кб |
|
| Доброй ночи
Задача спарсить таблицу с данными фирмы
Пока решил задачу так
<?php
$str = file_get_contents('table.html');
$pattern = "#<tr class=\"stdt_data\">\s*(?:<td [^>]+>[^<]+</td>)*\s*<td [^>]+>(?:<noindex><a [^>]+>)*([^<]+)(?:</a></noindex>)*</td>\s*</tr>#sU";
$pattern_replace = "#<!--(.+)-->#s";
$str2 = preg_replace($pattern_replace, "", $str);
preg_match_all($pattern, $str2, $out);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
|
Проблема в том, что в таблице(файл в приложении) есть закомментированный кусок, как раз в середине таблицы. При этом не выводятся последние две строки таблицы. Как дополнить выражение, чтобы обойтись без preg_replace(), то есть, "пропустить" закомментированный код?
Пробовал сделать так
<?php
$str = file_get_contents('table.html');
$pattern = "#(?<!<!--)<tr class=\"stdt_data\">\s*(?:<td [^>]+>([^<]+)</td>)*\s*<td [^>]+>(?:<noindex><a [^>]+>)*([^<]+)(?:</a></noindex>)*</td>\s*</tr>(?!-->)#sU";
preg_match_all($pattern, $str, $out);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
|
Но в этом варианте выбираются данные и из закомментированного участка таблицы | |
|
|
|
|
автор: ..... (10.02.2013 в 03:26) |
|
|
для: Slo_Nik
(09.02.2013 в 00:09)
| | IMHO быстрее может работать работать preg_match_all($r, preg_replace($r2, '', $str), $out);
чем с одним шаблоном типа #<!--.*?-->|<tr _то что надо_>#
, и последующим разбором нужного и ненужного из массива совпадений.
Чуть лучше вроде вариант, где после #<tr _то что надо_>(?:_то что не надо_<!--.*?--> )?#
на скорость прохождения повлияет меньше, но добавит кучу Данных в $0 совпадения, что тоже не очень | |
|
|
|