|
|
|
| Помогите составить регулярное выражение, 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> , а нужно первое. | |
|
|
|
|
|
|
|
для: 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") | |
|
|
|
|
|
|
|
для: duhon
(21.11.2011 в 13:57)
| | preg_match('/<table.*?id="obsTable"((?s).*?)<\/table>/', $text, $array)
Не находит, ничего:( | |
|
|
|
|
|
|
|
для: Ren11
(21.11.2011 в 15:44)
| | А на сколько секретен HTML-код? Возможно прикрепить файл с ним тут, чтобы можно было воспроизвести ситуацию? | |
|
|
|
|
|
|
|
для: 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";
}
|
| |
|
|
|
|
|
|
|
для: 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">" | |
|
|
|
|
|
|
|
для: duhon
(21.11.2011 в 17:33)
| | Да, срабатывает, именно это и выдает) | |
|
|
|
|
|
|
|
для: Ren11
(21.11.2011 в 18:33)
| | попробуй
/<table[^>]*?id="obsTable"[^>]*>.*?<\/table>/s
|
хотя подожди, у меня работает первый вариант
<table.*?id="obsTable"((?s).*?)<\/table>
|
| |
|
|
|
|
|
|
|
для: duhon
(21.11.2011 в 19:09)
| | У меня тоже оба варианты работают. Оказалось, для первого варианта, я ссылку плохую подставлял (я искал данные о погоде за декабрь 2011 года). Спасибо тебе огромное. Два дня сидел думал. | |
|
|
|