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

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

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

 

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

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

тема: Регулярное выражение для поиска таблицы / борьба с жадностью
 
 автор: Ren11   (21.11.2011 в 12:08)   письмо автору
 
 

Помогите составить регулярное выражение, 2 день не могу. додуматься. Нужно скопировать таблицу из html документа.

Таблица
<table cellspacing="0" cellpadding="0" id="obsTable" class="contentTable borderAll br5">
...
</table>

Вот мой код:

if (preg_match('/<table.*id="obsTable"((?s).*)<\/table>/', $text, $array))
{
echo $array[0];
echo "YES";
}
else
{
echo "No";
}

Проблема в том что он находит последнее вхождение тега </table> , а нужно первое.

  Ответить  
 
 автор: duhon   (21.11.2011 в 13:57)   письмо автору
 
   для: Ren11   (21.11.2011 в 12:08)
 

вот регулярка
<table.*?id="obsTable"((?s).*?)<\/table>

знак вопроса после ..e"((?s).*? переводит квантификатор * действовать лениво тобиш остановиться на первом вхождении </table>

также обрати внимание что я поставил и еще один знак вопроса, от там лишним не будет.
И еще, если будешь именно искать в html определенные таблицы то вариант
preg_match_all('/<table.*?id="obsTable"((?s).*?)<\/table>/', $text, $array
даст сбой если html не будет хорошо отформатирован разделами строк. ("\n")

  Ответить  
 
 автор: Ren11   (21.11.2011 в 15:44)   письмо автору
 
   для: duhon   (21.11.2011 в 13:57)
 

preg_match('/<table.*?id="obsTable"((?s).*?)<\/table>/', $text, $array)

Не находит, ничего:(

  Ответить  
 
 автор: cheops   (21.11.2011 в 16:40)   письмо автору
 
   для: Ren11   (21.11.2011 в 15:44)
 

А на сколько секретен HTML-код? Возможно прикрепить файл с ним тут, чтобы можно было воспроизвести ситуацию?

  Ответить  
 
 автор: Ren11   (21.11.2011 в 18:34)   письмо автору
 
   для: cheops   (21.11.2011 в 16:40)
 

HTML не секретный
[url]
http://www.wunderground.com/history/airport/CYQX/2011/1/1/CustomHistory.html?dayend=31&monthend=1&yearend=2011&req_city=NA&req_state=NA&req_statename=NA
[/url]
Надо забрать таблицу с данными.

Код

    $url = "http://www.wunderground.com/history/airport/CYQX/2011/1/1/CustomHistory.html?dayend=31&monthend=1&yearend=2011&req_city=NA&req_state=NA&req_statename=NA";
    $text = file_get_contents($url);
    if (preg_match('/<table.*?id="obsTable"((?s).*?)<\/table>/', $text, $array))
    {
        echo $array[0];
    }
    else
    {
        echo "No";
    }

  Ответить  
 
 автор: duhon   (21.11.2011 в 17:33)   письмо автору
 
   для: Ren11   (21.11.2011 в 15:44)
 

у тебя срабатывает хотябы это?
preg_match('/<table\b[^>]*?id="obsTable"[^>]*>/', $text, $array)


полюбому должно выводить "<table cellspacing="0" cellpadding="0" id="obsTable" class="contentTable borderAll br5">"

  Ответить  
 
 автор: Ren11   (21.11.2011 в 18:33)   письмо автору
 
   для: duhon   (21.11.2011 в 17:33)
 

Да, срабатывает, именно это и выдает)

  Ответить  
 
 автор: duhon   (21.11.2011 в 19:09)   письмо автору
 
   для: Ren11   (21.11.2011 в 18:33)
 

попробуй
/<table[^>]*?id="obsTable"[^>]*>.*?<\/table>/s


хотя подожди, у меня работает первый вариант
<table.*?id="obsTable"((?s).*?)<\/table>

  Ответить  
 
 автор: Ren11   (21.11.2011 в 19:52)   письмо автору
 
   для: duhon   (21.11.2011 в 19:09)
 

У меня тоже оба варианты работают. Оказалось, для первого варианта, я ссылку плохую подставлял (я искал данные о погоде за декабрь 2011 года). Спасибо тебе огромное. Два дня сидел думал.

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

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