regex - 使用正则表达式从 Perl 纯文本中提取 URL

标签 regex perl url

如何使用 Perl 正则表达式从纯文本中提取具有特定扩展名的特定域(可能带有可变子域)的所有 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";
}

它失败得可怕并给了我:
http://fail-o-tron.com/bleh omg omg omg omg omg http://homepage.com/woot.gif
http://shomepage.com/woot.gif

我认为这不会发生,因为我正在使用 .*? ,这应该是非贪婪的,并给我最小的匹配。谁能告诉我我做错了什么? (我不想要一些 super 复杂的 jar 头正则表达式来验证 URL;我想知道我做错了什么,以便我可以从中学习。)

最佳答案

URI::Find专为解决这个问题而设计。它将找到所有 URI,然后您可以过滤它们。它有一些启发式方法来处理尾随标点符号之类的事情。

更新:最近更新以处理 Unicode。

关于regex - 使用正则表达式从 Perl 纯文本中提取 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053349/

相关文章:

swift - 视频本地文件URL与保存的相册不兼容

javascript - 处理和替换双花括号内的文本

python - 如果任何模式不存在,则删除模式之间的线并打印所有

java - 在忽略大小写的情况下使用正则表达式匹配字符串

database - DBI 是 Perl 中访问数据库的唯一方法吗

perl - 为什么遵循 XPath 语句返回所有 "a"元素?

perl - 根据给定的 ID 列表从文本文件中提取所有行

.htaccess - 如何在 Opencart 中将所有 www 重定向到非 www 和 SSL Url?

java regex ,提取一行?

c# - Request.Url.Host 是否包含子域?