在使用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