【问题标题】:How can I manipulate just part of a Perl string?如何只操作 Perl 字符串的一部分?
【发布时间】:2010-10-11 17:03:58
【问题描述】:

我正在尝试编写一些 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 教程网站(这不是我的第一语言),但没有遇到类似的例子。任何人都可以建议一种优雅的方式吗?

【问题讨论】:

  • 从主题中我认为答案将是“使用substr() 作为左值”。很高兴看到一个 X/Y 问题实际上告诉你 Y 是什么。
  • 我想不出更好的主题行,所以我只是在意图上匹配了原始主题行。
  • @brian d foy:出于兴趣,原来的主题有什么问题?

标签: regex perl mediawiki


【解决方案1】:

你的任务有两个部分。查找并替换 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

【讨论】:

  • 啊,我还以为你会这么说呢。我希望它可能是 Perl 中一个不错的简单单行代码!我没有说清楚的是,输入实际上是非常古老的 TWiki,带有嵌入的 HTML 标签。我不确定 HTML 解析器会如何处理它,但我会尝试一下,以及规范化。感谢您的建议。
【解决方案2】:

你为什么不直接搜索“Body=”标签直到引号并将每个空格替换为 %20。

我什至不会为此使用正则表达式,因为我发现它们对任何事情都没有用,除了大规模变化,在线上的一切都在变化。

一个简单的循环可能是最好的解决方案。

【讨论】:

  • 如果你“发现它们对任何事情都没有用,除了大规模变化,在线上的一切都在变化”,那么我建议你应该了解它们的更细微的用途,以利用它们的力量。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多