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

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

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

 

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

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

тема: Выдрать кусок кода из HTML + преобразования
 
 автор: Гончий пёс   (16.06.2007 в 16:32)   письмо автору
 
 

Уверен, что тем с таким названием (точнее, с подобными вопросами) очень много, но ничего для себя я так и не нашел (честно пользовался поиском). В рег.выр.-ах, мягко говоря, не силен, сейчас учу, но почему-то с трудом продвигается =\

Итак...

Есть некий HTML код, а в нем две таблицы идущие почти подряд (разделены br-ом)
перавя таблица выглядит так:

<table width="90%" cellpadding="0" cellspacing="0" border=0 align="center" class="schedule">
<!--- Очень много строк=) --->
</table>

Вторая такая же, но class="common" т.е.

<table width="90%" cellpadding="0" cellspacing="0" border=0 align="center" class="common">
<!--- Очень много строк=) --->
</table>


Обе не содержат вложенных таблиц, обе таблицы встречаются в коде единожды

Так вот из них надобно вырезать теги <table....> и </table> и запихнуть в переменные $a и $b соответственно

Увы это не все.

В первой таблице встречаются такие ячейки

<!--- Начало заголовка таблицы, самый первый ряд --->
<tr>
<td>Случайное_слово1</td>
<td>Случайное_слово2</td>
<td>Неслучайное_слово1</td>
<td>Неслучайное_слово2</td>
<td>Неслучайное_слово3</td>
<td>&nbsp;</td>
</tr>
<!--- Конец заголовка таблицы. Далее везде=) --->

Все пять слов могут содержать буквы кириллицы, пробелы и знаки пунктуации. Неслучайные слова мне уже известны, случайные слова нужно занести в переменные $с и $d а заголовок удалить к чёртовой матери из переменной $a (первая таблица)

Полный код страницы в аттаче. Первая таблица начинается на 116-й строке, вторая на 417-й.

Искренне надеюсь на помощь!

   
 
 автор: Trianon   (16.06.2007 в 16:53)   письмо автору
 
   для: Гончий пёс   (16.06.2007 в 16:32)
 

если Вы расчитываете выполнить всё за одно обращение к preg - не стоит.
Если нет - делите задачу на несколько, и решайте по очереди.

   
 
 автор: Гончий пёс   (16.06.2007 в 17:25)   письмо автору
 
   для: Trianon   (16.06.2007 в 16:53)
 

Нет, ну за одно обращение чисто теоретически может быть и можно, но это, я думаю, непозволительная роскошь...

   
 
 автор: mr Bin   (16.06.2007 в 18:23)   письмо автору
 
   для: Гончий пёс   (16.06.2007 в 17:25)
 

>Так вот из них надобно вырезать теги <table....> и </table> и запихнуть в переменные $a и $b соответственно

Зачем вырезать? не проще просто подставить их в свой скрипт?

И вообще, Вам просто нужно сформировать свою страницу с расписанием поездов и всё? Или ещё что?

   
 
 автор: Гончий пёс   (16.06.2007 в 23:50)   письмо автору
 
   для: mr Bin   (16.06.2007 в 18:23)
 

Зачем вырезать "тейблы"? Ну во-первых, мне в конечном итоге нужно склеитиь несколько таблиц в одну (расписание-то не на одной странице), так что не надо мне "ихних" тейблов=) Да и потом мне (ну, вообще-то вам, а не мне=)) нужно будет выкидывать еще и заголовок таблицы: быть может "выкидывание" потом будет проще привязать к началу строки (^) если делать рег.выр.-ами или вырезать первые n строк, где будет описан заголовок (а их 7). Хотя с тем же успехом можно вырезать 8 первых строк, а потом

$a = str_replace("</table>", "", $a);

и тогда вырезание тейблов и заголовка вообще выходит из "юрисдикции" рег.выр.-ов.

В общем и целом ситуация такова: Есть произвольное число страниц, на которых расположено расписание. Нужно извлечь расписание, из произвольного числа страниц склеить одну таблицу и вывести ее на экран. Если есть другие подходы, подскажите - буду только рад.

   
 
 автор: mr Bin   (17.06.2007 в 09:56)   письмо автору
 
   для: Гончий пёс   (16.06.2007 в 23:50)
 


<?php
// Экспорт расписания с tutu.ru
 
// Массив с адресами, по которым нужно пройтись
$adr = array('http://www.tutu.ru/rasp.php?st1=40306&st2=40406','http://www.tutu.ru/rasp.php?st1=40306&st2=40406&list=1','http://www.tutu.ru/rasp.php?st1=40306&st2=40406&list=2');

echo 
'<table border=1>'// Начинаем таблицу

foreach ($adr as $i => $value) {
$content file_get_contents($value); // Сюда приходят адреса из массива
// Регулярка для выборки нужных элементов
$pattern "|<td><a href=\"([^<]+)\">([^<]+)</a></td>\r\n<td><a href=\"([^<]+)\">([^<]+)</a></td>\r\n<td>([^<]+)</td>\r\n<td><a href=\"([^<]+)\">([^<]+)</a></td>\r\n<td><a href=\"([^<]+)\">([^<]+)</a></td>[\s]*|is";
 
preg_match_all($pattern$content$out); 

for (
$i 0$i count($out[0]); $i++) { echo '<tr><td>'.$out[2][$i].'</td><td>'.$out[4][$i].'</td><td>'.$out[5][$i].'</td><td>'.$out[7][$i].'</td><td>'.$out[9][$i].'</td></tr>'; }

}
echo 
'</table>';
?>


если будут вопросы - задавайте.

   
 
 автор: Петр   (03.07.2007 в 11:27)   письмо автору
 
   для: mr Bin   (17.06.2007 в 09:56)
 

А как выдернуть погоду и поместить ее в массив?
http://www.gismeteo.ru/towns5/27333.htm

   
 
 автор: kasmanaft   (03.07.2007 в 14:54)   письмо автору
 
   для: Петр   (03.07.2007 в 11:27)
 

Посмотрите здесь:
http://softtime.ru/forum/read.php?id_forum=6&id_theme=38893
http://softtime.ru/forum/read.php?id_forum=6&id_theme=13533

   
Rambler's Top100
вверх

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