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