Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вопрос по preg_match_all

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
netclan
Отправлено: 25 Ноября, 2012 - 13:44:01
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Здравствуйте! Стала задача брать часть информации с другого сайта и для этих целей навоял следующее:
PHP:
скопировать код в буфер обмена
  1.  <?PHP
  2. $content = file_get_contents("http://адрес_сайта/ррр.html");
  3. $pos = strpos($content, "<div id=\"news-bg\">");
  4. $content = substr($content, $pos);
  5. $pos = strpos($content, "<div style=\"width: 600px; float:left; height: 2px\">");
  6. $content = substr($content, 0, $pos);
  7. preg_match_all("!<div style=\"float:left; margin:3px 0 0 5px;\">(.*?)<\/div><div style=\"float:left; margin:3px 0 0 226px;\" class=\"filmname\"><a href=\"\/repertuar\/\">(.*?)<\/a><\/div><div style=\"float:right; margin:3px 5px 0 0;\">(.*?)&nbsp;!si",$content,$arr_info);
  8. for ($i=0; $i<count($arr_info[1]); $i++) {
  9.       echo "<li>".$arr_info[1][$i]." - ".$arr_info[2][$i]." - ".$arr_info[3][$i];
  10.    }
  11.  
  12.     ?>

Так вот я беру и вытаскиваю информацию из этой части html кода:
Спойлер (Отобразить)


Из этой части кода, мне удаётся вытащить только время, название и стоимость, а как вытащить из этой части кода ещё и заголовки расписаний (Расписание на 25 ноября)?


-----
O_o
 
 Top
Panoptik
Отправлено: 25 Ноября, 2012 - 13:54:38
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




пишите более понятный код, не обязательно нужно впихивать в функции аргументы строкового вида, гораздо понятнее когда это всё разложено по полочкам
PHP:
скопировать код в буфер обмена
  1.  
  2.      <?PHP
  3.     $content = file_get_contents("http://адрес_сайта/ррр.html");
  4.     $pos = strpos($content, "<div id=\"news-bg\">");
  5.     $content = substr($content, $pos);
  6.     $pos = strpos($content, "<div style=\"width: 600px; float:left; height: 2px\">");
  7.     $content = substr($content, 0, $pos);
  8.    
  9.     $pattern  = "!<center><b>([^<]+)|<div style=\"float:left; margin:3px 0 0 5px;\">(.*?)<\/div><div style=\"float:left; margin:3px 0 0 226px;\" class=\"filmname\"><a href=\"\/repertuar\/\">(.*?)<\/a><\/div><div style=\"float:right; margin:3px 5px 0 0;\">(.*?)&nbsp;!si"
  10.  
  11.     preg_match_all($pattern,$content,$arr_info);
  12.     for ($i=0; $i<count($arr_info[1]); $i++) {
  13.           echo "<li>".$arr_info[1][$i]." - ".$arr_info[2][$i]." - ".$arr_info[3][$i];
  14.        }
  15.      
  16.         ?>
  17.  


-----
Just do it
 
 Top
netclan
Отправлено: 25 Ноября, 2012 - 13:57:39
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




[quote=Panoptik][/quote]
Не понял, как понятнее?


-----
O_o
 
 Top
Panoptik
Отправлено: 25 Ноября, 2012 - 13:59:13
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




просто из функции preg_match_all вынести паттерн
приятнее смотрится
смотрите там измененный паттерн
сделайте print_r($arr_info);


-----
Just do it
 
 Top
netclan
Отправлено: 25 Ноября, 2012 - 14:18:26
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




[quote=Panoptik][/quote]
Ок, работает! Можете пояснить по <b>([^<]+)| или дать ссылку, где расписаны применённые операторы для данного случая? Хочется разобраться!
(Добавление)
В любом случае спасибо!


-----
O_o
 
 Top
Panoptik
Отправлено: 25 Ноября, 2012 - 14:41:36
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




самый лучший материал когда-либо встречающийся по регуляркам мне:
http://phpclub[dot]ru/detail/article/regexp_1
http://phpclub[dot]ru/detail/article/regexp_2
по вышеуказанным статьям все вопросы по регуляркам отпали
так же могу порекомендовать сервис для работы с регулярками
http://functions-online[dot]com

можно так же посмотреть здесь
http://www.php.su/articles/?cat=...exp&page=008


-----
Just do it
 
 Top
netclan
Отправлено: 25 Ноября, 2012 - 14:45:14
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




[quote=Panoptik][/quote]
Спасибо, буду изучать!
php изучаю недавно, подскажите, а как вывести полученные данные в таблицу, я попробовал так:
PHP:
скопировать код в буфер обмена
  1. for ($i=0; $i<count($arr_info[1]); $i++) {
  2.       echo "<li>".$arr_info[1][$i]." - ".$arr_info[2][$i]." - ".$arr_info[3][$i]." - ".$arr_info[4][$i];
  3.  
  4. echo "<table>";
  5. echo "<tr><td colspan=\"3\">".$arr_info[1][$i]."</td></tr>";
  6. echo "<tr><td>".$arr_info[2][$i]."</td>";
  7. echo "<tr><td>".$arr_info[3][$i]."</td>";
  8. echo "<tr><td>".$arr_info[4][$i]."</td></tr>";
  9. echo "</table>";
  10.    }

но пока ничего путного не вышло! Не понял


-----
O_o
 
 Top
Panoptik
Отправлено: 25 Ноября, 2012 - 14:49:11
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




echo "<table>";
вот эти теги нужно выводить за пределами цикла, это первое
далее проверяете наличии заголовка в первом массиве, если там что-то есть выводите тр тд (с колспаном 4) с заголовком, если нет, то выводите ваши данные как и описано у вас.


-----
Just do it
 
 Top
netclan
Отправлено: 26 Ноября, 2012 - 06:59:04
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Panoptik пишет:
echo "<table>";
вот эти теги нужно выводить за пределами цикла, это первое
далее проверяете наличии заголовка в первом массиве, если там что-то есть выводите тр тд (с колспаном 4) с заголовком, если нет, то выводите ваши данные как и описано у вас.

Попытался сделать так:
PHP:
скопировать код в буфер обмена
  1. echo "<div class=\"CSSTableG\" >";     
  2. echo "<table>";
  3. for ($i=0; $i<count($arr_info[1]); $i++) {
  4. if (in_array($arr_info[1], $arr_info)) {
  5. echo "<tr><td colspan=\"4\">".$arr_info[1][$i]."</td></tr>";
  6. echo "<tr><td>Время</td>";
  7. echo "<td>Название</td>";
  8. echo "<td>Стоимость</td></tr>";
  9. } else {
  10. }
  11. echo "<tr><td>".$arr_info[2][$i]."</td>";
  12. echo "<td>".$arr_info[3][$i]."</td>";
  13. echo "<td>".$arr_info[4][$i]."</td></tr>";
  14.    }
  15. echo "</table>";
  16. echo "</div>";      

,но в таблице образуются дополнительные пустые ячейки, подскажите как сделать, чтобы пустые ячейки не выводились?!


-----
O_o
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB