为什么我的Perl正则表达式不匹配简单的主机名?

时间:2011-12-18 16:14:41

标签: regex perl regex-greedy

我无法提取主机名,该主机名可能是FQDN和简单主机名

例如,使用sed可以正常工作:

echo test_serv1.TEST-Site-1.test.com|sed 's/\..*//'
test_serv1
echo test_serv1|sed 's/\..*//'
test_serv1

但在Perl中我只得到它的FQDN:

my $t='test_serv1.TEST-Site-1.test.com';
my ($res) = $t=~ /^(.*?)\./;
print "$res\n";

我为test_serv1尝试了不同的组合,但它不起作用,为什么?

2 个答案:

答案 0 :(得分:5)

/^(.*?)\./不匹配的原因是因为简单主机名中没有.,所以匹配永远不会发生。

以下内容适用于:

  • <强> my ($res) = $t =~ /([^.])+/;

    提取第一次出现的连续非.字符

答案 1 :(得分:4)

为什么不为perl使用相同的方法?

use strict;
use warnings;

my $t='test_serv1.TEST-Site-1.test.com';
$t =~ s/\..*//;
print "$t\n";
$t='test_serv1';
$t =~ s/\..*//;
print "$t\n";