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

时间:2015-07-26 14:33:32

标签: 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 =~ s/www.//r;

print $domain."\n";

输入http://domain-name.tldhttp://www.domain-name.tld或甚至* www.domain-name.tld后,此代码会返回domain-name.tld

我的问题是,使用将搜索和替换线组合成一个的Perl单线程可以实现同样的目标吗?

2 个答案:

答案 0 :(得分:3)

如果您同时选择http://www.,但同时查找它们,则会删除其中一个或两个。原始代码中唯一的差异是它会将www.http://domain-name.tld更改为http://domain-name.tld,我认为这不是一个缺点

要求修改用户输入的on-liner似乎很奇怪,所以我写了这个样本来处理来自DATA文件句柄的四个不同的字符串。另请注意,使用不同的分隔符进行替换以避免必须逃避斜杠更为整洁

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

输出

domain-name.tld
domain-name.tld
domain-name.tld
domain-name.tld

答案 1 :(得分:0)

结合正则表达式:(http:\/\/)|(www\.)

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

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