我希望来自http://www.foo.com/bar.html
的{{1}}。
正则表达式应该做的工作。有一些模块可以做到这一点吗?我检查了URI,似乎没有这样的子。
答案 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=~/^(.+)\?/;