LINUX.ORG.RU

Perl regexp


0

0

1) выбрал таблицу из html-файла, теперь нужно найти конструкцию:
"<tr ...><td ...>th</td></tr>" и заменить на </thead><tbody>.

... - обозначает любой текст, <tr> может быть любой строкой, например 4.

<tr.*?><td.*?>th</td></tr> - выбирает по несколько строк.

2) Внутри <thead> ... </thead>, заменить все td на th.

Вроде простые вещи хочешь сделать, а надо так выворачиваться :)


Re: Perl regexp

Поиграться с "жадностью" регекспов (не знаю насколько это возможно в Perl) || использовать XSLT

mannaz ()
Ответ на: Re: Perl regexp от mannaz

Re: Perl regexp

А то как же, есть конечно. х+? это нежадный х+

www_linux_org_ru ★★★★★ ()
Ответ на: Re: Perl regexp от mannaz

Re: Perl regexp

> Поиграться с "жадностью" регекспов (не знаю насколько это возможно в Perl)

ЛОЛ!

Извините, вырвалось.

roller ★★★ ()

Re: Perl regexp

1. |(<table[^>]*>)(<tr>.+?</tr>)|$1<thead>$2</thead>|g
2.поигратся с (?=<thead>)    (A zero-width positive lookahead assertion)

roller ★★★ ()
Ответ на: Re: Perl regexp от roller

Re: Perl regexp

[^>]* - хорошая конструкция вместо .*?

WinLin ()
Ответ на: Re: Perl regexp от roller

Re: Perl regexp

С первым вопросом разобрался.

Можно ли из длинной строки выбрать нужную часть <thead>.*</thead>,
а потом в этой части строки сделать s/td/tr/ ?

В одну команду несколько действий нельзя включать?

WinLin ()
Ответ на: Re: Perl regexp от WinLin

Re: Perl regexp

Сделал так:
$line =~ m/<thead>.*</thead>/i;
my ($line1,$line2,$line3) = ($`,$&,$');
$line2 =~ s/td/th/ig;
$line = $line1 . $line2 . $line3;

WinLin ()
Ответ на: Re: Perl regexp от WinLin

Re: Perl regexp

если я правильно понял исходную структуру документа (т.е. «[текст]<thead>[много текста с “td”]<tr[парамз]><td[парамз]>th</td></tr>[ещё текст]»), то можно как-то так:

perl -e '$_=join"",<>;s|<thead>(.*?)<tr[^>]*><td[^>]*>th</td></tr>|"<thead>".(($t=$1)=~ s!td!th!gms,$t)."</thead><tbody>"|gems;print' my.html

arsi ★★★★★ ()

Re: Perl regexp

я б смотрел бы в сторону HTML::Parser

x97Rang ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.