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.

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


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

mannaz
()
Ответ на: комментарий от roller

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

WinLin
() автор топика
Ответ на: комментарий от roller

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

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

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

WinLin
() автор топика
Ответ на: комментарий от WinLin

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

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

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