Perl regex - удалить первую часть разделенной точками строки - PullRequest
0 голосов
/ 06 июня 2018

Я должен удалить первую часть строки, разделенной точками.Например:

test.domain.com          --> domain.com
sub.domain.example.com   --> domain.example.com
bar.foo.bar.hoster.net   --> foo.bar.hoster.net

и так далее ...

Как это сделать в perl?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Самый простой способ - использовать подстановку следующим образом:

$str =~ s/^[^.]*\.//;

Регулярное выражение означает:

  • ^ - начало строки
  • [^.]* - 0 или более символов, которые не .
  • \. - буквальная точка

Нет необходимости захватывать оставшуюся часть строки, чтобы просто заменить ее обратноin.


Этот код предполагает, что если в строке нет точек, вы должны оставить ее без изменений.

Однако, если вы хотите, чтобы "foo" превратился в "", вам просто нужно сделать \. необязательным:

$str =~ s/^[^.]*\.?//;
0 голосов
/ 06 июня 2018

Решение без регулярных выражений * может быть более очевидным:

use strict;
use warnings;
use 5.010;

my @tests = (
    'test.domain.com',
    'sub.domain.example.com',
    'bar.foo.bar.hoster.net',
);

for my $t (@tests) {
    (undef, my @parts) = split(/\./, $t);
    say join('.', @parts);
}

Или:

for my $t (@tests) {
    my $i;
    say join('.', grep { ++$i > 1 } split(/\./, $t));
}

* Ну, в любом случае в основном без регулярных выражений.Первый аргумент split - это шаблон, но мы просто сопоставляем буквальную точку.

0 голосов
/ 06 июня 2018

Это должно сработать:

use strict;
use warnings;

my @domains = ("test.domain.com", "abc.sub.example.com");

foreach my $value (@domains) {
    $value =~ s/[^.]+.(.*)/$1/;
    print $value . "\n";
    }

Мне нравится использовать класс отрицательных символов [^.] + (Не точка) против выполнения. ?Использование. ?кажется, время от времени доставляет мне неприятности, когда класс персонажей делает то, о чем действительно просят, вплоть до первой точки без точки.

Вывод:

domain.com
sub.example.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...