在使用Perl正则表达式将数据存储到数据库中之前,我需要规范化URL。使用Perl的URL正则表达式
下面是一些例子网址:
但是,每当我在 foo//
尝试下面的代码,而不是富后只删除了//
,它会还删除了http://
中的双斜杠。我需要保持//
在http://
,但我不需要在foo//
后转发//
。我还需要删除可能出现在URL中任何位置的所有/../
或/./
。
基本上,这个:
"http://www.codeme.com:123/../foo//bar.html"
应该成为这样的:
"http://www.codeme.com/foo/"
我很新的使用Perl我一直忽略了它,并认为我永远不会需要它但是生活已经证明我是错的。因此,如果您能带领我走向正确的轨道,我将非常感谢您的帮助。
sub main
{
my $line;
open(FH, "test.txt");
until(($line = <FH>) =~ /9/) {
$line =~ tr/A-Z/a-z/;
$line =~ s|//|/| ;
$line =~ s|\:\d\d\d|| ;
$line =~ s|:80||;
print $line;
}
close FH;
}
我不知道,你正在寻找实现正常化是完全清楚。 'www.codeme.com:123'没有标准化为'www.codeme.com'。 '/../ foo // bar.html'没有标准化为'/ foo'。 '/..// foo/bar.html'标准化为'/'。也许你应该尝试阐述你想要完成的事情,因为它看起来是非标准的。 – 2012-03-07 15:44:55
你不能这样做。 URL路径并不是一个真正的文件系统路径,您不应该假设它直接映射到文件。您可能想要执行HEAD请求,然后查看位置标题所代表的内容。 – 2012-03-08 02:18:08