Regex perl正则表达式替换2个子字符串

Regex perl正则表达式替换2个子字符串,regex,perl,Regex,Perl,我编写了一个perl代码片段,从控制台输入的域名前面剥离http://和www #!/usr/bin/perl use strict; print "Enter the domain name to be queried:\n"; my $input_domain = <>; chomp ($input_domain); my $inter_domain = $input_domain =~ s/http:\/\///r; my $domain = $inter_domain

我编写了一个perl代码片段,从控制台输入的域名前面剥离
http://
www

#!/usr/bin/perl

use strict;

print "Enter the domain name to be queried:\n";
my $input_domain = <>;
chomp ($input_domain);

my $inter_domain = $input_domain =~ s/http:\/\///r;
my $domain = $inter_domain =~ s/www.//r;

print $domain."\n";
#/usr/bin/perl
严格使用;
打印“输入要查询的域名:\n”;
我的$input_域=;
chomp($input_domain);
my$inter\u domain=$input\u domain=~s/http:\//\///r;
my$domain=$inter_domain=~s/www.//r;
打印$domain。“\n”;
http://domain-name.tld
http://www.domain-name.tld
甚至*
www.domain-name.tld
输入后,此代码返回
domain-name.tld

我的问题是,使用将搜索和替换行合并为一行的Perl one liner可以实现同样的效果吗?

组合正则表达式:
(http:\/\/)(www\)

s/(http:\/\/)|(www\.)//r


这将删除http://和/或www.

如果将
http://
www.
都设置为可选,但同时查找它们,则将删除其中一个或两个。与原始代码唯一不同的是它将改变
www。http://domain-name.tld
http://domain-name.tld
我认为这不是一个缺点

要求一个修改用户输入的内联程序似乎有些奇怪,因此我编写了这个示例,它处理来自
数据
文件句柄的四个不同字符串。还要注意的是,在替换中使用不同的分隔符更为整洁,以避免必须跳出斜杠

use strict;
use warnings;

while ( <DATA> ) {
  s|^(?:http://)?(?:www\.)?||;
  print;
}


__END__
http://www.domain-name.tld
http://domain-name.tld
www.domain-name.tld
domain-name.tld

这只会造成一种或另一种替代。它将改变
http://www.domain-name.tld
进入
www.domain-name.tld
这不是我们想要的
domain-name.tld
domain-name.tld
domain-name.tld
domain-name.tld