Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: обойти комментарий регулярным выражением
 
 автор: Slo_Nik   (09.02.2013 в 00:09)   письмо автору
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 совпадения, что тоже не очень

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования