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 от 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

если я правильно понял исходную структуру документа (т.е. «[текст]<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 ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.