Почему мое регулярное выражение Perl не соответствует простым именам хостов? - PullRequest
0 голосов
/ 18 декабря 2011

Мне не удалось извлечь имя хоста, которое может быть как полным доменным именем, так и простым именем хоста

Например, с помощью sed оно работает нормально:

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

Но в Perl я получаю только когда его полное доменное имя:

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

Я пробовал разные комбинации для test_serv1, но это не работает, почему?

Ответы [ 2 ]

5 голосов
/ 18 декабря 2011

Причина, по которой /^(.*?)\./ не совпадает, заключается в том, что в простом имени хоста нет ., поэтому совпадение никогда не происходит.

Следующее будет работать с обоими:

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

    Извлекает первое вхождение непрерывных не-. символов

4 голосов
/ 18 декабря 2011

Почему вы не используете тот же метод для 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";
...