Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Длинный текст не парсится регулярками, ограничение/настройка Perl 
:(
    Опции темы
TP@MB@Y
Дата 22.6.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: нет
Всего: 4



написал парсер, который обрабатывает HTML-страницы путем запихивания содержимого страницы в переменную и проходом по ней регуляркой:

Код

while ( $html_text =~ /<regexp>/s ) {
    # некоторые действия
}


при длине текста > ~40kb  регулярка не срабатывает :(
подозреваю, что в перле есть какое-то ограничение из-за которого имеет место эта проблема.

заранее спасибо за ответ!

PS 
варианты использовать готовые решения для парсинга HTML я коненчно же рассмотрю, если припрет. но хотелось бы разобраться имено с этой проблемой (ограничение по размеру текста).

Это сообщение отредактировал(а) TP@MB@Y - 22.6.2009, 15:41
PM   Вверх
ginnie
Дата 22.6.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



TP@MB@Y, а почему у меня работает?

Код

perl -e 'my $test = "some text." x 100000; $test .= "pattern"; print "len: ", length($test), $/; print "pattern found$/" if ($test =~ /pattern/);'
len: 1000007
pattern found



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
amg
Дата 22.6.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(TP@MB@Y @  22.6.2009,  15:40 Найти цитируемый пост)
при длине текста > ~40kb  регулярка не срабатывает :(подозреваю, что в перле есть какое-то ограничение из-за которого имеет место эта проблема.
Насколько мне известно, ограничение только одно: доступная оперативная память (+ своп, но в него лучше не залазить).

PM MAIL   Вверх
DaemonSuw
Дата 22.6.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: 3
Всего: 3



По умолчанию ограничений нету никаких smile этож перл... возможно наша регулярка плохо работает и зацикливается где нибудь... проверьте регексп!
PM MAIL ICQ   Вверх
TP@MB@Y
Дата 22.6.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: нет
Всего: 4



ginnie,  угу. Вы совершенно правы. зря я на Perl наговаривал.

выяснил причину ошибки: html-страницы в кодировке cp1251, а я перекодирую их в utf-8(в свою родную локаль). так вот, на тех страницах находятся "кривые" символы (в броузере отображаются в виде черного ромбика со знаком вопроса) и iconv (я использую Text::Iconv) вылетает с ошибкой. 

у iconv есть опция "-c"  чтобы игнорировать символы, которые не могут быть сконвертированы. 
в модуле Text::Iconv я пока не нашел такой функции...
PM   Вверх
vadiml
Дата 4.7.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



Попробуйте вместо Text::Iconv модуль Encode

encode('cp1251',$var) все недопустимые символы заменяет обычным знаком вопроса.

PM MAIL Jabber   Вверх
evilsoul
Дата 6.7.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.3.2006

Репутация: нет
Всего: 0



Скорее всего у тебя в тексте есть перенос строк , можешь использовать модификаторы s или m
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.