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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вставить функцию в регулярное выражение 
:(
    Опции темы
gcc
Дата 12.10.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



есть текст html, нужно перевести его в текст...

и тут стала проблема что надо таблицы которые в разметке перевести в текстовый вид красиво как таблица...

вот нашел отличное решение:
http://www.perlmonks.org/?node_id=338485

только еще у меня в тексте несколько таблиц...

как написать примерно такое регулярное вырадение чтобы вставить туда функцию Dump_table, например:

Код

$html_string =~ s/\<table(.*?)\>(.*?)\<\/table\>/Dump_table($2)/igs; 


в google не нашел, вообще...
как вставить функцию или как такое реализовать?

Это сообщение отредактировал(а) gcc - 12.10.2010, 12:44
PM WWW ICQ Skype GTalk Jabber   Вверх
Jimy
Дата 12.10.2010, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нужно добавить модификатор "e".
Т.е. должно быть так:
Код

$html_string =~ s/\<table(.*?)\>(.*?)\<\/table\>/&Dump_table($2)/eigs; 

PM   Вверх
gcc
Дата 15.10.2010, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



у меня perl5.8.9

Код

        $html =~ s/\<table(.*?)\>(.*?)\<\/table\>/&dumptt($2)/eigs; 

но замена не происходит...

если написать так:
Код

        $html =~ s/\<table(.*?)\>(.*?)\<\/table\>/&dumptt($2)/igs; 

то замена работает, ставится &dumptt(

может e как-то мешает?


вот полсностью:


Код



use HTML::TableExtract;
use strict;
use warnings;
use HTML::TreeBuilder;
use Text::ASCIITable;
use List::Util qw(max);
use Encode;



# open( FFF, '/usr/home2/ii/Desktop/table.txt' ) or die "can't open $!";

open( FFF, '/usr/home2/ii/Desktop/x0i/11.htm' ) or die "can't open $!";


 local $/ = ''; 
 my $html = <FFF>;


$html =~ s/\<table(.*?)\>(.*?)\<\/table\>/&dumptt($2)/eigs; 

print $html;

sub dumptt {

  my($html) = (@_);

$html = " <table> ". $html." </table>";

 my $t = HTML::TreeBuilder->new();
 $t->parse($html);
 $t->eof;

return Encode::encode( 'cp1252',DumpTable( $_ )), $/, $/  for $t->find_by_tag_name('table') ;


}


PM WWW ICQ Skype GTalk Jabber   Вверх
Jimy
Дата 15.10.2010, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Должно работать.

Цитата

но замена не происходит...

Т.е. результат равен исходному тексту?

имейте ввиду, что здесь Вы читаете только первую строку файла:
Код

my $html = <FFF>;

Может так и нужно, но на всякий случай обращаю внимание.


PM   Вверх
gcc
Дата 15.10.2010, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



Цитата(Jimy @ 15.10.2010,  09:09)
Код

my $html = <FFF>;

Может так и нужно, но на всякий случай обращаю внимание.

тут включен другой режим:
Код

local $/ = ''; 


режим счения абзацев


фунция что-то не хочет вставлятся....

Это сообщение отредактировал(а) gcc - 15.10.2010, 10:00
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 15.10.2010, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



есть
Код
use Modern::Perl;


Цитата
For now, this only enables the strict and warnings pragmas, as well as all of the features available in Perl 5.10. It also enables C3 method resolution order; see perldoc mro for an explanation. In the future, it will include additional CPAN modules which have proven useful and stable.


http://search.cpan.org/~chromatic/Modern-P.../Modern/Perl.pm

но тут Perl 5.10

а есть ли такое на Perl 5.12??

в документации по Perl 5.12 можно писать код прямо в рег.выр. 
http://perldoc.perl.org/perlretut.html#A-b...ular-expression

Это сообщение отредактировал(а) gcc - 15.10.2010, 10:24
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 15.10.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



Jimy, работает, только оно вывод вставляет в самое начало текста

Код

$html =~ s/\<table(.*?)\>(.*?)\<\/table\>/&dumptt($2)/eigs; 

но я хотел чтобы было там где была талица...

что-то не понятно...

сейчас попробую perl 5.10
PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




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


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

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