Как я могу манипулировать только частью строки Perl? - PullRequest
0 голосов
/ 11 октября 2010

Я пытаюсь написать какой-нибудь Perl для преобразования текста на основе HTML в формат MediaWiki и столкнулся со следующей проблемой: я хочу искать и заменять часть разделенного текста и спрашивать, не знает ли кто-нибудь аккуратный способ сделать это. Мой поток ввода выглядит примерно так:

Please mail <a href="mailto:help@myco.com&amp;Subject=Please help&amp;Body=Please can some one help me out here">support.</a> if you want some help.

и я хочу изменить Please help и Please can some one help me out here на Please%20help и Please%20can%20some%20one%20help%20me%20out%20here соответственно, не изменяя другие пробелы в строке.

Естественно, мне также нужно иметь возможность справиться с более чем одной такой ссылкой на линию, поэтому соединение не является хорошим вариантом.

Я внимательно осмотрел учебные сайты по Perl (это не мой родной язык), но не нашел ничего подобного в качестве примера. Кто-нибудь может посоветовать элегантный способ сделать это?

Ответы [ 2 ]

5 голосов
/ 11 октября 2010

Ваша задача состоит из двух частей.Найдите и замените mailto URI - используйте для этого модуль парсинга HTML.Эта тема подробно описана при переполнении стека.

Другая часть заключается в канонизации URI.Для этого подходит модуль URI.

use URI::mailto;
my @hrefs = ('mailto:help@myco.com&amp;Subject=Please help&amp;Body=Please can some one help me out here');
print URI::mailto->new($_)->as_string for @hrefs;
__END__
mailto:help@myco.com&amp;Subject=Please%20help&amp;Body=Please%20can%20some%20one%20help%20me%20out%20here
0 голосов
/ 11 октября 2010

Почему бы вам просто не найти тег "Body =" до кавычек и заменить каждый пробел на% 20.

Я бы даже не использовал для этого регулярные выражения, поскольку я не нахожу их полезными ни для чего, кроме массовых изменений, где все в строке меняется.

Лучшим решением может быть простой цикл.

...