2014-10-30 44 views
1

我想解析推文的文本文件并删除URL并将它们放入urls.txt文件中。目前,我有这样的正则表达式:Perl 5:如何提高URL解析的正则表达式

($line =~ /((?:https?|ftp|telnet|gopher|file|imap):\/\/[\w\-\.\~\!\*\'\(\)\;\:\@\&\=\+\$\,\/\\\?\%\#\[\]]*)/)

但是,当我想进一步巩固它,它即使是现在相当笨拙,我想知道是否有什么办法可以检查valid URL characters(中[\w\-\.\~\!\*\'\(\)\;\:\@\&\=\+\$\,\/\\\?\%\#\[\]]*部分)使用类似数组或散列的东西。或者任何不会如此不必要的冗长的东西。

我的代码的其余部分可以提供,如果需要出于任何原因。

+0

说更多关于“想要进一步构建” – ysth 2014-10-30 16:52:19

+0

这似乎是一个XY问题。你想达到什么目的? – Sobrique 2014-10-30 16:53:33

+0

@ysth据我所知,其中一些字符作为域名的一部分无效。 – 2014-10-30 17:12:19

回答

2

如果您想验证一个URL,为什么不使用CPAN中的模块来为您辛苦工作。

my $uri = URI->new("http://www.perl.com"); 

URI模块here的细节。

所推荐的Sobrique,你也可以使用:

use Data::Validate::URI qw(is_uri); 

if (is_uri("http://www.perl.com")) { 
    ... 
} 

Data::Validate::URI模块here的细节。

+0

我正在看'Data :: Validate :: URI' – Sobrique 2014-10-30 16:54:07

+0

看起来不错!更新了包含它的答案。 – 2014-10-30 16:56:14

+0

不幸的是,我不能。这是一个脚本编程模块,讲师希望使用正则表达式完成。 – 2014-10-30 17:14:11