如何分析Perl中的URL?

时间:2012-01-20 03:05:57

标签: perl

我希望来自http://www.foo.com/bar.html的{​​{1}}。

正则表达式应该做的工作。有一些模块可以做到这一点吗?我检查了URI,似乎没有这样的子。

5 个答案:

答案 0 :(得分:6)

您可以这样使用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;
}

答案 1 :(得分:4)

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)和不透明的部分(方案和片段之间的所有内容)将为你提供你所追求的信息。

答案 2 :(得分:4)

您也可以尝试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();

答案 3 :(得分:1)

我无法想到这样做的模块,但这应该为你做到:

sub getRootOfURL()
{
    my ($baseurl, undef) = split(/\?/, shift);
    return $baseurl;
}

答案 4 :(得分:1)

为什么要使用一些胖模块而不是简单的正则表达式

($base)=$url=~/^(.+)\?/;