我怎样才能操作P​​erl字符串的一部分?

时间:2010-10-11 17:03:59

标签: regex perl mediawiki

我正在尝试编写一些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 helpPlease can some one help me out here更改为Please%20helpPlease%20can%20some%20one%20help%20me%20out%20here,而不更改该行上的任何其他空格。

当然,我还需要能够在线上处理多个这样的链接,因此拼接不是一个好选择。

我已经对Perl教程网站(这不是我的第一语言)进行了很好的了解,但是没有像这样的例子。任何人都可以建议这样做的优雅方式吗?

2 个答案:

答案 0 :(得分:5)

您的任务分为两部分。查找并替换mailto URI - 为此使用HTML解析模块。 Stack Overflow上详细介绍了该主题。

另一部分是规范化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

答案 1 :(得分:-3)

为什么不直接在引号中搜索“Body =”标记,并用%20替换每个空格。

我甚至不会使用常规表达式,因为我发现除了质量变化之外的任何东西都有用,因为线上的所有内容都会发生变化。

简单循环可能是最佳解决方案。