Как мне проанализировать URL в Perl? - PullRequest
1 голос
/ 20 января 2012

Я хочу http://www.foo.com/bar.html из http://www.foo.com/bar.html?key=value....

Регулярное выражение должно сделать работу.Есть ли какой-нибудь модуль для этого?Я проверил URI , похоже, нет такой суб.

Ответы [ 5 ]

6 голосов
/ 20 января 2012

Вы можете использовать URI таким образом:

sub remove_query_string($)
{
    my $uri = URI->new(shift);
    $uri->query(undef);
    return $uri->as_string;
}

Но да, вы определенно можете использовать регулярное выражение для этого:

sub remove_query_string($)
{
    my $ret = shift;
    $ret =~ s/\?.*//;
    return $ret;
}
4 голосов
/ 20 января 2012

Вы также можете попробовать URI :: URL .

use strict;
use warnings;

use URI::URL;

my $path = 'http://www.foo.com/bar.html?key=value';

my $url = URI::URL->new($path);

my $new_url = URI::URL->new();

$new_url->scheme( $url->scheme );
$new_url->host( $url->host );
$new_url->path( $url->path );

print $new_url->as_string();
4 голосов
/ 20 января 2012

Модуль URI включает в себя методы / механизмы:

 $u1 = URI->new("http://www.perl.com");
 $u2 = URI->new("foo", "http");
 $u3 = $u2->abs($u1);
 $u4 = $u3->clone;
 $u5 = URI->new("HTTP://WWW.perl.com:80")->canonical;

 $str = $u->as_string;
 $str = "$u";

 $scheme = $u->scheme;
 $opaque = $u->opaque;
 $path   = $u->path;
 $frag   = $u->fragment;

 $u->scheme("ftp");
 $u->host("ftp.perl.com");
 $u->path("cpan/");

Для вашей задачи вы должны объединить схему (http) и непрозрачный раздел (все, что находится между схемой)и фрагмент) даст вам информацию, которую вы ищете.

1 голос
/ 20 января 2012

зачем использовать какой-то жирный модуль вместо простого регулярного выражения

($base)=$url=~/^(.+)\?/;
1 голос
/ 20 января 2012

Я не могу вспомнить модуль, который это делает, но это должно сделать это для вас:

sub getRootOfURL()
{
    my ($baseurl, undef) = split(/\?/, shift);
    return $baseurl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...