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 :: С исходным кодом html страницы рег. выражение работает, а с полученным через curl нет

 PHP.SU

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


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

> Без описания
land15
Отправлено: 28 Августа, 2010 - 01:15:17
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Июль 2010  


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




Выражение такого вида /bgcolor=".{7}" valign="top" align="center" class="norm8">[0-9]*<.*<.a><.td>.<.tr>/ когда с браузера захожу на страницу, беру ее исходный код, посылаю на обработчик через форму - все работает как надо, когда беру страницу через curl, ничего не находит. Что за чудеса, кто знает?
 
 Top
Champion Супермодератор
Отправлено: 28 Августа, 2010 - 10:15:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Сохрани то, что получает курл, сравни, найди отличия. Если Отличий не увидишь, напиши сюда кусок тексте из того, что получил курл и регулярку.
(Добавление)
land15 пишет:
<.td>
Странная вещь. Неужели там правда что-то есть?
Регулярку вижу. Текст полученный курлом надо смотреть.
 
 Top
Uchkuma
Отправлено: 28 Августа, 2010 - 12:08:31
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




land15 пишет:
<.a><.td>.<.tr>
Действительно странно. Понятно, что буквы тут быть не может, иначе это будет другой тэг. Если там может быть пробельный символ, пишите так:
Цитата:
<\sa><\std>.<\str>
 
 Top
land15
Отправлено: 28 Августа, 2010 - 12:09:07
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Июль 2010  


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




Там, конечно, ничего кроме слеша нет, я так поставил, как самое универсальное потому, что не знаю в чем дело, пытался сгладить условия поиска.
Различий между исходными материалами, наверное, нет т.к. то что получил по курлу, отправил на отладочный скрипт (различия только в методе получения исходного материала) - все работает, как надо.
Курл получает вот, что:
<tr>
<td bgcolor="#FFFFFF" valign="top" align="center" class="norm8">20</td>
<td bgcolor="#FFFFFF" valign="top" align="center">
<img src="/pic/20/g_ok.gif" width="20" height="20" alt="Открыто на сайте">

</td>
<td bgcolor="#FFFFFF" class="norm8" valign="top"><a href="obyava.php?id=1178061" class="dark" target="_blank"><b>СДАМ,</b> Офис, магазин в любом районе. Недорого
</a></td>
<td bgcolor="#FFFFFF" class="norm8" valign="top">

Офис</td>
<td bgcolor="#FFFFFF" class="norm8" valign="top" align="center">27.08.2010<br>-<br><b>26.09.2010</font></b></td>
<td bgcolor="#FFFFFF" valign="top" align="center"><img src="/pic/20/g_edit.gif" width="20" height="20" border="0" alt="Редактировать"></a></td>
<td bgcolor="#FFFFFF" valign="top" align="center"><img src="/pic/20/g_delete.gif" width="20" height="20" border="0" alt="Удалить"></a></td>
</tr>
</table>

это смысловая часть, таких много на странице они мне и нужны.
Регулярка /bgcolor=".{7}" valign="top" align="center" class="norm8">[0-9]*<.*<.a><.td>.<.tr>/; до <.a работает и в курле, только прибавляю <.a и все остальное - получаю
"<br<".
Бред какой-то.
Есть еще удобный концевой маркер - даты, пробовал вместо <.a><.td>.<.tr> ставить [0-9][0-9].[0-9] и т.д., все равно показывает глупость.

(Отредактировано автором: 28 Августа, 2010 - 12:11:09)

 
 Top
Champion Супермодератор
Отправлено: 28 Августа, 2010 - 12:18:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Есть подозрение, что это
land15 пишет:
</td>
</tr>
выглядит вот так: </td>\r\n</tr>, значит одной точкой тут не обойтись. [\s\r\t\n]* поставь - не прогадаешь
(Добавление)
И . не включает в себя символы перевода строки обычно. Чтоб включала, надо регулярке добавить ключик /s
 
 Top
land15
Отправлено: 28 Августа, 2010 - 12:39:10
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Июль 2010  


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




Не помогает. Исходное выражение при ручном копировании работает, а когда та же страница приходит через курл - нет, вот в чем вопрос. Никто с таким не встречался?
 
 Top
movEAX
Отправлено: 28 Августа, 2010 - 14:01:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


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




А что именно этой регуляркой хочешь выдернуть? Возможно существуют более простые пути решения твоей проблемы.


-----
армия.. самое убогое место
 
 Top
land15
Отправлено: 28 Августа, 2010 - 14:39:49
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Июль 2010  


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




Точно, есть. Спасибо. Теперешнюю потребность закрыл, но для полнофункциональной работы надо уметь брать вышеприведенный блок полностью и разбирать его по частям как угодно. Так что если кто встречался с такой загадкой, как у меня выложите рецепт, пожалуйста.
 
 Top
movEAX
Отправлено: 28 Августа, 2010 - 15:06:35
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


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




PHP:
скопировать код в буфер обмена
  1. $ptrn = '@<td[^>]+center[^>]+norm8">.+?</tr>@s'
  2. preg_match_all( $ptrn, $page, $matches );

Результат:
Спойлер (Отобразить)



-----
армия.. самое убогое место
 
 Top
JustUserR
Отправлено: 28 Августа, 2010 - 15:59:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




land15 пишет:
Все работает как надо, когда беру страницу через curl, ничего не находит. Что за чудеса, кто знает?
Причина различия которое происходит при обработке регулярным выражением скопированного вручную исходного HTML-кода и полученной из curl источника данных - может быть в том что содаеражтся в фактически разной кодовой таблице относительно внутренней кодировки в PHP-скрипте - таким образом можно попробовать явно указать кодировку для HTTP-запроса или переконвертировать полученный информационный блок в кодировку по умолчанию для внутреннего представления - для этой цели полезно использовать функции http://www.php.su/functions/?cat=mbstring

(Отредактировано автором: 28 Августа, 2010 - 15:59:57)



-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
land15
Отправлено: 28 Августа, 2010 - 22:37:11
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Июль 2010  


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




Товарищи, большое спасибо за информацию, проблема оказывается не регулярных выражениях, со вчера сервер перестал посылать содержимое страниц, стал высылать 302 код на авторизацию, так что это другая тема.
Хотел давно спросить, можно где-нибудь скачать список модификаторов и правил для php обработчика регулярных выражений?
 
 Top
movEAX
Отправлено: 28 Августа, 2010 - 22:54:56
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


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




land15 пишет:
Хотел давно спросить, можно где-нибудь скачать список модификаторов и правил для php обработчика регулярных выражений?

В официальной документации все подробно описано.


-----
армия.. самое убогое место
 
 Top
JustUserR
Отправлено: 29 Августа, 2010 - 19:48:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




land15 пишет:
Хотел давно спросить, можно где-нибудь скачать список модификаторов и правил для php обработчика регулярных выражений?
Регулярные выражения класса RCRE в языке PHP во многом похожи с оригинальными шаблонами из языка Perl однако имеют имеют достаточные отличия по многим аспектам - в общим связанные с тем что в PHP в отличие от Perl или JS шаблоны регулярных выражений не являются синтаксической конструкцией и даже отдельным языка - и соответственно недоступны возможности по автоматическму присвоению внешних переменных по совпадающим шаблона или использованию в шаблонах оригинального уровня экранирования Также при работе с регулыярными выражениями как и любыми другими строковыми функциями являются важными кодовые таблицы для представления исходной информации - по этой причине в целях фильтрации желательно использовать именно разрешающие шаблоны чтобы пропускаемые ими данные всегда были правильыми относительно локального представления


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 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