Регулярные выражения в Perl

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Darnet
проходил мимо

Регулярные выражения в Perl

Непрочитанное сообщение Darnet » 2010-04-02 13:05:27

Гуру можете подсказать как мне отформатировать строку, у меня есть переменная с таким содержанием:

Код: Выделить всё

Hex-STRING: 00 1A 4D 30 FA 08 
Мне надо сделать чтобы она была в вида:

Код: Выделить всё

00:1a:4d:30:fa:08
Вот что у меня получилось:

Код: Выделить всё

s/"//g; s/\s*$//; s/ /:/g; s/(.)/\l\1/g;
Только здесь perl ругается на \1 и не убирает Hex-STRING:. Помогите кто может, а то очень нужен этот скрипт.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: Регулярные выражения в Perl

Непрочитанное сообщение Гость » 2010-04-02 13:24:54

Что-то типа может этого:

Код: Выделить всё

my $a = "Hex-STRING: 00 1A 4D 30 FA 08";
$a =~ s/(?:[^:]+: )((?:[\dA-F]{2} ?)+)/$1/;
$a =~ tr/A-F /a-f:/;

Гость
проходил мимо

Re: Регулярные выражения в Perl

Непрочитанное сообщение Гость » 2010-04-02 20:26:22

кстати. чё-то сразу не подумал... можно же проще:

Код: Выделить всё

my $a = "Hex-STRING: 00 1A 4D 30 FA 08";
$a = substr($a, 12);
$a =~ tr/A-F /a-f:/;


Darnet
проходил мимо

Re: Регулярные выражения в Perl

Непрочитанное сообщение Darnet » 2010-04-08 13:35:08

Помогите вот еще одной строкой, так же есть переменная с таким содержанием:

Код: Выделить всё

.106.1.172.16.112.171
и
.1.1.172.16.112.171
Как мне сделать ее такого вида

Код: Выделить всё

106
и
1

Гость
проходил мимо

Re: Регулярные выражения в Perl

Непрочитанное сообщение Гость » 2010-04-08 14:21:02

Если надо выдернуть первое число, то:

Код: Выделить всё

my $a = ".106.1.172.16.112.171";
$a =~ /(\d+)/;
и теперь в переменной $1 будет это самое число.

Darnet
проходил мимо

Re: Регулярные выражения в Perl

Непрочитанное сообщение Darnet » 2010-04-08 14:55:05

Пишу вот так:

Код: Выделить всё

s/(\d+)/$1/;
Вроде все правильно, а все равно не заменяет. Где может быть ошибка?

Гость
проходил мимо

Re: Регулярные выражения в Perl

Непрочитанное сообщение Гость » 2010-04-08 15:33:14

Может можно как-то и по-другому, но вот это даёт желаемый результат:

Код: Выделить всё

s/\.(\d+).+/$1/;

Podedinov
мл. сержант
Сообщения: 84
Зарегистрирован: 2008-12-28 11:50:19

Re: Регулярные выражения в Perl

Непрочитанное сообщение Podedinov » 2010-04-08 15:42:22

Большое спасибо, все работает как надо.

Гость
проходил мимо

Re: Регулярные выражения в Perl

Непрочитанное сообщение Гость » 2010-06-05 1:55:22

Гость писал(а):Может можно как-то и по-другому, но вот это даёт желаемый результат:

Код: Выделить всё

s/\.(\d+).+/$1/;
не совсем коректно
так правильнее

Код: Выделить всё

s/^\.(\d+).+/$1/;
Последний раз редактировалось Alex Keda 2010-06-06 23:57:44, всего редактировалось 1 раз.
Причина: Товарищщи, цените чужое время, юзайте кнопочку [code]...