繁体   English   中英

使用多个Perl正则表达式来查找和替换

[英]Using multiple Perl regular expressions to find and replace

我是一个需要你专业知识的Perl和正则表达新手。

我需要处理包含Foo Bar1.jpg等占位符行的文本文件,并将其替换为https:/baz/qux/Foo_Bar1.jpg等相应的URL。

您可能已经猜到了,我正在使用HTML。 占位符文本引用文件名,这是编写文档时唯一可用的文件。 这就是我必须使用占位符文本的原因。 最后,当然,我想用URL替换文件名(在我将文件上传到CMS以获取URL之后)。 那时,我掌握了所有信息 - 文件名和URL。 当然,我可以将URL粘贴到HTML文档中的占位符名称上。 事实上,我已经做到了。 但我确信有更好的方法。

简而言之,我有这样的占位符行:

Foo Bar1.jpg
Foo Bar2.jpg
Foo Bar3.jpg

我也有这样的URL行:

https:/baz/qux/Foo_Bar1.jpg
https:/baz/qux/Foo_Bar2.jpg
https:/baz/qux/Foo_Bar3.jpg

我想找到占位符字符串并使用正则表达式捕获像Bar1这样的微分器。 然后我想使用像Bar1这样的捕获部分来执行另一个匹配相应URL字符串部分的正则表达式搜索,即https:/baz/qux/Foo_Bar1.jpg 成功匹配后,我想用https:/baz/qux/Foo_Bar1.jpg替换Foo Bar1.jpg行。

最终,我想为每个排列做到这一点,所以https:/baz/qux/Foo_Bar2.jpg也取代了Foo Bar2.jpg等等。

我编写了与占位符和URL匹配的正则表达式。 据我所知,这不是我的问题。 我可以找到我需要处理的字符串。 例如,/ [ /[az]+\\s([a-z0-9]+)\\.jpg/成功匹配我所谓的占位符文本并捕获我称之为区分符的内容。

然而,虽然过去一周我花了一些令人尴尬的小时阅读Stack Overflow,其他各种网站以及关于珍珠和珍珠正则表达式的O'Reilly书籍,但我无法理解如何处理我能做的事情。找。

我认为你缺少的是使用Perl的内部grep函数,根据你所谓的“差异化”来搜索URL行列表。

将您的URL行插入Perl数组(假设它们有一个有限的可管理数量,因此内存不会被破坏):

open URLS, theUrlFile.txt or die "Cannot open.\n";
my @urls = <URLS>;

然后在包含“占位符”的文件的循环中:

while (my $key = /[a-z]+\s([a-z0-9]+)\.jpg/g) {
  my @matches = grep $key, @urls;
  if (@matches) {
    s/[a-z]+\s$key\.jpg/$matches[0]/;
  }
}

如果@matches != 1您可能还想插入错误/警告消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM