【问题标题】:How to Regex Multiple URLs From Same Variable In Perl如何在 Perl 中从同一个变量正则表达式多个 URL
【发布时间】:2011-10-20 00:01:08
【问题描述】:

我正在尝试搜索数据库中的字段以提取 URL。有时一个字段中会有多个 URL,我想将它们提取到单独的变量(或数组)中。

我知道我的正则表达式不会涵盖所有可能性。只要我标记任何以 http 开头并以空格结尾的内容就可以了。

我遇到的问题是我的努力似乎每条记录仅获得 1 个 URL,或者他们仅获得每个 URL 的最后一个字母 1。我已经根据其他人发布的解决方案尝试了几种不同的技术,但我还没有找到适合我的解决方案。

示例输入行: 测试 http://marko.co http://tester.net 几乎所有你想要的。

输出目标 $var[0] = http://marko.co $var[1] = http://tester.net

第一次尝试: if ( $status =~ m/http:(\S)+/g ) { 打印 "$&\n"; }

输出: http://marko.co

第二次尝试: @statusurls = ($status =~ m/http:(\S)+/g); 打印“@statusurls\n”;

输出: o t

我是正则表达式的新手,但由于每次尝试都使用相同的正则表达式,我不明白为什么它会返回如此不同的结果。

感谢您提供的任何帮助。

我查看了这些帖子,要么没有找到我想要的东西,要么不明白如何实现它:

这似乎是最有前途的(这是我第二次尝试的地方,但它没有返回整个 URL,只返回字母:How can I store regex captures in an array in Perl?

这里面有一些很棒的东西。我很好奇是否需要将 URL 视为一个单词,因为它以空格结尾:Regex Group in Perl: how to capture elements into array from regex group that matches unknown number of/multiple/variable occurrences from a string?

这个提供了与前两个类似的建议。 How can I store captures from a Perl regular expression into separate variables?

解决方案: @statusurls = ($status =~ m/(http:\S+)/g); 打印“@statusurls\n”;

谢谢!

【问题讨论】:

  • 另外 - 不要使用 $& - 请参阅 perlre docs 中的警告
  • @urls = $status =~ m{ *(https*://[^ ]+) *}g;

标签: regex perl url


【解决方案1】:

我认为你需要捕捉的不仅仅是一个角色。试试这个正则表达式:

m/http:(\S+)/g

【讨论】:

  • 您的回答是我在正确方向上需要的推动力。我使用了您发布的内容并将 ( 移到 http 的左侧,因为我在结果中需要它。谢谢!
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 2013-07-13
  • 2011-08-30
相关资源
最近更新 更多