2012-10-22 2 views
0

Мне нужно сравнить два URL-адреса в Perl.Сравнение двух URL-адресов

URL-адреса, состоящие только из домена DOMAIN или DOMAIN/(с корневым URL-адресом, заканчивающимся косой чертой), эквивалентны.

Таким образом, следующие строки должны быть равны: "http://example.com" и "http://example.com/".

+0

Обрезать косую черту и сравнить? –

+2

@MichalKlouda - 'http: // example.com/foo /' и 'http: // example.com/foo' не эквивалентны – Quentin

+0

может просто проверить, есть ли индекс (a, b) + index (b, a)! = -2 – jozefg

ответ

5

comparsion

To compare two URLs, use the eq() method:  
if ($url_one->eq(url_two)) { ... } 

For example: 

use URI; 
my $url_one = URI->new('http://www.example.com'); 
my $url_two = URI->new('http://www.example.com/'); 

if ($url_one->eq($url_two)) { 
    print "The two URLs are equal.\n"; 
} 
The two URLs are equal. 
+0

Вы должны удалить '$ url_one-> path ('/');', поскольку это явно устанавливает путь первого, который будет равен пути второго, вместо того, чтобы показывать, что они одинаковы, если вы просто установите URI с предыдущими двумя строками. – Quentin

+0

@Quentin done ... Спасибо, это был только пример – Ghostman

0

Вы можете сделать:

my $url_1 = 'http://www.example.com'; 
my $url_2 = 'http://www.example.com/'; 

if ($url_1 =~ m/\A$url_2\/\z/ || $url_2 =~ m/\A$url_1\/\z/) { 
    print "URLs are the same\n"; 
} 

Ну, учитывая, что они действительно действительные URL-адреса. Регулярное выражение только проверяет, что если вы добавите «/» в конце, это все тот же URL-адрес

Итак, если вы добавите «/» в конце $ url_1, это будет «http: // www. example.com/ ', который сделает второе условие в if, если true.

+0

Неправильно: это считало бы равным http://www.example.com/foo и http://www.example.com/foo/ – porton

+0

Я не получаю это, вы просто дали 2 равных ссылки там. –

+0

Они не равны. По какой-то причине добавление косой черты не изменяет URL-адрес, только если URL-адрес состоит только из домена. foo и foo/не равны. – porton

Смежные вопросы