URI 的 Perl 条带正则表达式
Perl Strip Regex For URI
我正在尝试删除所有 https、http、www、/、: 和 .从域名中创建一个用户帐户文件夹在我的系统上。所以我需要做的是将一个看起来像这样的 URL“https://www.My-Domain.com/”变成 "My-Domaincom" 我很接近,但似乎无法让它工作。
our $DomainAccount = lc($ENV{HTTP_REFERER});
$DomainAccount =~ s/^http:\/\/|^https:\/\///;
$DomainAccount =~ s/^www\.|(/.)//;
您只需要确保您匹配 http://
或 https://
(可选地后跟 www.
)、匹配 并捕获 主机 URL 部分到第一个 /
然后匹配其余部分,并替换为对第一个捕获组 </code> 的反向引用,并且为了从中删除 <code>.
host.com
您需要像这样使用第二个捕获组:
$DomainAccount =~ s/^https?:\/\/(?:www\.)?([^\/.]+)\.([^\/.]+).*//i;
"https://www.My-Domain.com/"
的输出:My-Domaincom
注意我添加了一个不区分大小写的标志 /i
只是为了确保该模式也可以处理 HTTP://
大小写。
正则表达式匹配:
^
- 字符串开头
https?:\/\/
- 文字字符序列 http://
或 https://
(?:www\.)?
- 文字字符序列出现一次或零次 www.
([^\/.]+)
- 第 1 组:/
和 .
以外的一个或多个字符
\.
- 文字点
([^\/.]+)
- 第 2 组:/
和 .
以外的一个或多个字符
.*
- 该行的其余部分
为了解决 choroba 的评论,这里有一个两步解决方案,适用于在主机部分包含多个点的 URL:
$DomainAccount =~ s/^https?:\/\/(?:www\.)?([^\/]+).*//i;
$DomainAccount =~ s/\.//g;
URI可以帮到你,但是你还是得自己把www
去掉:
#! /usr/bin/perl
use warnings;
use strict;
use URI;
my $url = 'URI'->new('https://www.My-Domain.com/');
my $account = $url->host;
$account =~ s/^[^.]*\.// while 1 != $account =~ tr/.//;
$account =~ s/\.//;
print $account, "\n";
这只会在结果中留下顶级和二级域名(尝试使用 http://some.very.long.domain.name.com
)。
我正在尝试删除所有 https、http、www、/、: 和 .从域名中创建一个用户帐户文件夹在我的系统上。所以我需要做的是将一个看起来像这样的 URL“https://www.My-Domain.com/”变成 "My-Domaincom" 我很接近,但似乎无法让它工作。
our $DomainAccount = lc($ENV{HTTP_REFERER});
$DomainAccount =~ s/^http:\/\/|^https:\/\///;
$DomainAccount =~ s/^www\.|(/.)//;
您只需要确保您匹配 http://
或 https://
(可选地后跟 www.
)、匹配 并捕获 主机 URL 部分到第一个 /
然后匹配其余部分,并替换为对第一个捕获组 </code> 的反向引用,并且为了从中删除 <code>.
host.com
您需要像这样使用第二个捕获组:
$DomainAccount =~ s/^https?:\/\/(?:www\.)?([^\/.]+)\.([^\/.]+).*//i;
"https://www.My-Domain.com/"
的输出:My-Domaincom
注意我添加了一个不区分大小写的标志 /i
只是为了确保该模式也可以处理 HTTP://
大小写。
正则表达式匹配:
^
- 字符串开头https?:\/\/
- 文字字符序列http://
或https://
(?:www\.)?
- 文字字符序列出现一次或零次www.
([^\/.]+)
- 第 1 组:/
和.
以外的一个或多个字符
\.
- 文字点([^\/.]+)
- 第 2 组:/
和.
以外的一个或多个字符
.*
- 该行的其余部分
为了解决 choroba 的评论,这里有一个两步解决方案,适用于在主机部分包含多个点的 URL:
$DomainAccount =~ s/^https?:\/\/(?:www\.)?([^\/]+).*//i;
$DomainAccount =~ s/\.//g;
URI可以帮到你,但是你还是得自己把www
去掉:
#! /usr/bin/perl
use warnings;
use strict;
use URI;
my $url = 'URI'->new('https://www.My-Domain.com/');
my $account = $url->host;
$account =~ s/^[^.]*\.// while 1 != $account =~ tr/.//;
$account =~ s/\.//;
print $account, "\n";
这只会在结果中留下顶级和二级域名(尝试使用 http://some.very.long.domain.name.com
)。