[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с регулярками
panacea
Ребят, помогите с парсером с гугла, а точнее с регулярками тут ошибка ж..ой чую. Так как работает наперекосяк.
preg_match_all( '|<h2 class="title">(.*)<a class="star-link.*|Uis', $page_text, $url );
preg_match_all( '|<span class="date ">(.*)<\/span>|U', $page_text, $html );
preg_match_all( '|<span class="source">(.*)<\/span>|U', $page_text , $ch );
Первые 2 как то парсят. А вот третий ленится. Видно source считает функцией или не правильно написано. Помогите плиз.



Спустя 6 часов, 18 минут, 26 секунд (26.03.2011 - 21:42) panacea написал(а):
Никто не знает регулярок? Результат мои мучений тут

Спустя 1 час, 3 минуты, 42 секунды (26.03.2011 - 22:46) cremnet написал(а):
Цитата (panacea @ 26.03.2011 - 12:24)
Ребят, помогите с парсером с гугла, а точнее с регулярками тут ошибка ж..ой чую. Так как работает наперекосяк.
preg_match_all( '|<h2 class="title">(.*)<a class="star-link.*|Uis', $page_text, $url );
preg_match_all( '|<span class="date ">(.*)<\/span>|U', $page_text, $html );
preg_match_all( '|<span class="source">(.*)<\/span>|U', $page_text , $ch );
Первые 2 как то парсят. А вот третий ленится. Видно source считает функцией или не правильно написано. Помогите плиз.


попробуй пробелы заменить на спец символы \s или \040 (ваще в регулярных использовать пробелы не лучший вариант ph34r.gif )

я бы это
preg_match_all( '|<span class="source">(.*)<\/span>|U', $page_text , $ch );
искал так
preg_match_all( '|<span[^c]*class="source"[^>]*>(.*?)<\/span>|Uis', $page_text , $ch );

Спустя 9 минут, 5 секунд (26.03.2011 - 22:55) panacea написал(а):
Так...давайте разбирать эту строчку. Вставил как вы советовали. Не помогло. Глядите.

Спустя 2 минуты, 11 секунд (26.03.2011 - 22:57) cremnet написал(а):
Цитата (panacea @ 26.03.2011 - 19:55)
Так...давайте разбирать эту строчку. Вставил как вы советовали. Не помогло. Глядите.

дайте строку из html которую вы парсируете желательно с куском до и после

Спустя 3 минуты, 23 секунды (26.03.2011 - 23:00) panacea написал(а):
<div class="additional-article"><div class="aa-inner"><a href="http://www.banki.ru/news/lenta/?id=2808482" target="_blank" class="usg-AFQjCNEK_VyevAuUEZWgOV0bqMjjiKYYCQ  did-a93d4dbe03823fbf article" id="MAA4AEgJUAFgAmoFcnVfcnU"><b>Чистая прибыль</b> группы UniCredit в 2010 году сократилась на 22% — до 1,32 млрд евро</a>  <span class="source">Информационный портал Банки.ру</span> <span class="article-more-link"></span>  </div></div>   <div class="additional-article"><div class="aa-inner"><a href="http://www.finam.ru/international/newsitem57AF3/" target="_blank" class="usg-AFQjCNEzKY3c3PPBbbVLBcMiH8-CQt2VQA  did-4843fa2090a5f168 article" id="MAA4AEgJUAJgAmoFcnVfcnU">13%-ное падение квартальной прибыли</a>  <span class="source">Финам.RU</span> <span class="article-more-link"></span>

Спустя 4 минуты, 57 секунд (26.03.2011 - 23:05) cremnet написал(а):
у меня работает с данным кодом... кст флаг U можно убрать
проверить можно кст тут

Спустя 11 минут, 1 секунда (26.03.2011 - 23:16) panacea написал(а):
Убрал U все равно тот же результат.
А вашу прогу я неделю буду изучать только.

Спустя 59 секунд (26.03.2011 - 23:17) Evilsoul написал(а):
не знаю как оно у тебя вообще заработало!
| - это значит "или"
а шаблон обозначается # или / и никак иначе!

Спустя 2 минуты, 31 секунда (26.03.2011 - 23:20) cremnet написал(а):
Цитата (Evilsoul @ 26.03.2011 - 20:17)
не знаю вообще как оно у тебя заработало!
| - это значит "или"
а шаблон обозначается # или / и никак иначе!

)) он определяте сл симовл после кавычек как начала шаблона... так что это работает, но вобщем это к месту, лучше ваще кавычки использовать "'[regexp]'is"

Спустя 30 секунд (26.03.2011 - 23:20) Evilsoul написал(а):
здесь (.*), знак вопроса нужен, так (.*?)

Спустя 4 минуты, 27 секунд (26.03.2011 - 23:25) panacea написал(а):
preg_match_all( '#<span[^c]*class="source"[^>]*>(.*?)<\/span>#is', $page_text , $ch );
Не проходит.

Спустя 4 минуты, 35 секунд (26.03.2011 - 23:29) cremnet написал(а):
Цитата (panacea @ 26.03.2011 - 20:25)
preg_match_all( '#<span[^c]*class="source"[^>]*>(.*?)<\/span>#is', $page_text , $ch );
Не проходит.

проверь переменный... var_dump, у мя работает... или сократи регулярку и прибавляй по частям

сначала поищи
"'<span[^>]*>'is"
потом
"'<span[^c]class=[^>]*>'is"
...
"'<span[^c]class=\"source\"[^>]*>'is"
и наконец
"'<span[^c]class=\"source\"[^>]*>(.*?)<\/span>'is"

на какомто этапе поймешь что не так ))) biggrin.gif

чесно говоря у мя работает как бы я не пытался видоизменять ищи траблы в тексте который ты передаешь

блин, вспомнли случай про кавычки... браузеры их сами порой подставляют и когда исходный код смотришь видишь что class="className" с кавычками а в итоге их либо нет либо они одинарные
попробуй
"'<span[^c]class=[\"\']?source[\"\']?[^>]*>(.*?)<\/span>'is"

проверь всетаки по адресу как работает
http://regexr.com?2td0k

Спустя 9 минут, 53 секунды (26.03.2011 - 23:39) panacea написал(а):
На первый и второй выдает Array ( [0] => Array ( [0] => [1] => [2] =>...[281] => [282] => [283] => [284] => [285] => ) )
На 3ий и 4ый Array ( [0] => Array ( ) )

Перед этим стоит
$page_text=iconv( 'UTF-8', 'windows-1251', curl( $url ) );

Это может испортить дело?


"'<span[^c]class=[\"\']?source[\"\']?[^>]*>(.*?)<\/span>'is"
Вариант прошел!!!!

Спустя 5 минут, 11 секунд (26.03.2011 - 23:44) cremnet написал(а):
Цитата (panacea @ 26.03.2011 - 20:39)
На первый и второй выдает Array ( [0] => Array ( [0] => [1] => [2] =>...[281] => [282] => [283] => [284] => [285] => ) )
На 3ий и 4ый Array ( [0] => Array ( ) )

Перед этим стоит
$page_text=iconv( 'UTF-8', 'windows-1251', curl( $url ) );

Это может испортить дело?


"'<span[^c]class=[\"\']?source[\"\']?[^>]*>(.*?)<\/span>'is"
Вариант прошел!!!!

значит все дело было в кавычках

Спустя 6 минут, 51 секунда (26.03.2011 - 23:51) panacea написал(а):
Да. Спасибо. А с программой я не могу разобраться.

Таким и оставить паттерн?

Спустя 16 минут, 13 секунд (27.03.2011 - 00:08) cremnet написал(а):
Цитата (panacea @ 26.03.2011 - 20:51)
Да. Спасибо. А с программой я не могу разобраться.

Таким и оставить паттерн?

оставить? в программе пишите регулярное выражение к примеру
<span[^>]> и ниже указываете html, результат он подсветит голубеньким
галки ставим вместо флажков

Спустя 5 минут, 37 секунд (27.03.2011 - 00:13) panacea написал(а):
preg_match_all( "'<h2[^c]class=[\"\']?title[\"\']?[^>]*>(.*)<a[^c]class=[\"\']?star-link'is", $page_text, $url );
preg_match_all( "'<span[^c]class=[\"\']?date[\"\']?[^>]*>(.*?)<\/span>'is", $page_text, $html );
preg_match_all( "'<span[^c]class=[\"\']?source[\"\']?[^>]*>(.*?)<\/span>'is", $page_text , $ch );

Ну вот так получатеся да?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.