L0c*_*z0r -2 regex url perl host
所以我要做的是删除所有内容,包括第一个"/"后出现在"."之后.所以:http://linux.pacific.net.au/primary.xml.gz 将成为:http://linux.pacific.net.au
我如何使用正则表达式执行此操作?我正在运行的系统无法使用URI工具.
$url = 'http://linux.pacific.net.au/primary.xml.gz';
($domain) = $url =~ m!(https?://[^:/]+)!;
print $domain;
Run Code Online (Sandbox Code Playgroud)
输出:
http://linux.pacific.net.au
Run Code Online (Sandbox Code Playgroud)
这是官方正则表达式,可用于解码URI:
my($scheme, $authority, $path, $query, $fragment) =
$uri =~ m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;
Run Code Online (Sandbox Code Playgroud)
我建议你使用URI::Split
它将标准URL分成你的constonnt部分并重新加入它们.你想要前两个部分 - 方案和主机.
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;
Run Code Online (Sandbox Code Playgroud)
产量
http://linux.pacific.net.au
Run Code Online (Sandbox Code Playgroud)
更新
如果您的评论我正在运行的系统无法使用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;
Run Code Online (Sandbox Code Playgroud)