Perl, RegEx и LookAhead — форматируем MAC-адрес

Задача — из 001e8c15ffbc сделать 00:1e:8c:15:ff:bc

Решение —

perl -le 'my $x = «001e8c15ffbc»;$x =~ s/(...(?!\Z))/\1:/g; print $x'

Разберем по кусочкам этот примитив.
(...(?!\Z))/\1:

... — два любых символа (можно написать длиннее, если сомневаемся, что к нам придёт именно мак) — например, [a-f\d]{2}
(?!\Z) — заглянем вперёд — нет ли там конца строки. Если есть — не попадаем в условие и, соответственно, не заменяем.

Вот собственно и вся сложность лукахедов и прочего.

Комментировать

Войдите чтобы оставить комментарий.