如何使用Perl regexp从纯文本中提取具有特定扩展名的特定域(可能具有可变子域)的所有URL?我试过了:
my $stuff = 'omg http://fail-o-tron.com/bleh omg omg omg omg omg http://homepage.com/woot.gif dfgdfg http://shomepage.com/woot.gif aaa';
while($stuff =~ m/(http\:\/\/.*?homepage.com\/.*?\.gif)/gmsi)
{
print $1."\n";
}
Run Code Online (Sandbox Code Playgroud)
它失败了,给了我:
http://fail-o-tron.com/bleh omg omg omg omg omg http://homepage.com/woot.gif
http://shomepage.com/woot.gif
Run Code Online (Sandbox Code Playgroud)
我认为这不会发生因为我正在使用.*?,这应该是非贪婪的,并给我最小的匹配.谁能告诉我我做错了什么?(我不想要一些超级复杂的,预制的regexp来验证URL;我想知道我做错了什么,所以我可以从中学习.)
访问CPAN:Regexp :: Common :: URI
编辑:即使您不需要预制正则表达式,它也可以帮助您查看有效的测试模块的来源.
如果要查找与特定字符串匹配的URL,可以轻松使用此模块执行此操作.
#!/usr/bin/env perl
use strict;
use warnings;
use Regexp::Common qw/URI/;
while (<>) {
if (m/$RE{URI}{HTTP}{-keep}/) {
print $_ if $1 =~ m/what-you-want/;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14193 次 |
| 最近记录: |