所以我要做的就是删除所有内容,包括第一个“/”后出现在“。”之后。 所以:http://linux.pacific.net.au/primary.xml.gz 会成为:http://linux.pacific.net.au
如何使用正则表达式执行此操作?我正在运行的系统无法使用URI工具。
答案 0 :(得分:6)
$url = 'http://linux.pacific.net.au/primary.xml.gz';
($domain) = $url =~ m!(https?://[^:/]+)!;
print $domain;
输出:
http://linux.pacific.net.au
这是官方正则表达式,可用于解码URI:
my($scheme, $authority, $path, $query, $fragment) =
$uri =~ m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;
答案 1 :(得分:5)
我建议您使用URI::Split
,它会将标准网址分成适合您的常规部分并重新加入。您需要前两部分 - 计划和主机。
use strict;
use warnings;
use URI::Split qw/ uri_split uri_join /;
my $scheme_host = do {
my (@parts) = uri_split 'http://linux.pacific.net.au/primary.xml.gz';
uri_join @parts[0,1];
};
print $scheme_host;
<强>输出强>
http://linux.pacific.net.au
<强>更新强>
如果您的评论我正在运行的系统无法使用URI工具意味着您无法安装模块,那么这里是一个正则表达式解决方案。
你说你希望删除所有内容,包括第一个“/”后出现在“。”之后,所以/^.*?\./
找到第一个点,m|[^/]+|
在下一次斜线之后找到所有内容。
输出与前面代码的输出相同
use strict;
use warnings;
my $url = 'http://linux.pacific.net.au/primary.xml.gz';
my ($scheme_host) = $url =~ m|^( .*?\. [^/]+ )|x;
print $scheme_host;
答案 2 :(得分:4)
我正在运行的系统无法使用URI工具。
我真的建议你尽一切可能先解决这个问题。如果您无法使用CPAN模块,那么您将错失Perl的许多功能,并且您的Perl编程生命将比它需要的更令人沮丧。