【问题标题】:Why isn't my Perl regex matching simple hostnames?为什么我的 Perl 正则表达式不匹配简单的主机名?
【发布时间】:2011-12-18 16:14:41
【问题描述】:

我未能提取可能既是 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 尝试了不同的组合,但它不起作用,为什么?

【问题讨论】:

    标签: regex perl regex-greedy


    【解决方案1】:

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

    以下内容适用于两者:

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

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

    【讨论】:

    • 我在 $res 中得到“1”而不是字符串。我把它换成了我的 ($res) = $t =~ /(\w+)/;现在它工作正常。 10x
    【解决方案2】:

    你为什么不对 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";
    

    【讨论】:

    • 糟糕。有时事情比你想象的要简单得多......10x
    猜你喜欢
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2015-09-15
    • 2010-10-24
    • 2022-01-04
    相关资源
    最近更新 更多