Что нового

Преобразовать строку в IP-адрес

pvnn

Осваивающий
Сообщения
305
Репутация
32
Всем здравствуйте!
Нужна помощь.
Необходимо строку 172027003010 перевести регулярным выражением в 172.27.3.10, т.е. после каждого 3-го символа необходимо поставить точку и удалить лишние нули.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
pvnn,
В два захода:
Код:
ConsoleWrite(StringRegExpReplace(StringRegExpReplace('172027003010', '^(\d{3})(\d{3})(\d{3})(\d{3})$', '${1}\.${2}\.${3}\.${4}'), '(?<=^|\.)0{0,2}', '') & @LF)
ConsoleWrite(StringRegExpReplace(StringRegExpReplace('127000000000', '^(\d{3})(\d{3})(\d{3})(\d{3})$', '${1}\.${2}\.${3}\.${4}'), '(?<=^|\.)0{0,2}', '') & @LF)
ConsoleWrite(StringRegExpReplace(StringRegExpReplace('002027003010', '^(\d{3})(\d{3})(\d{3})(\d{3})$', '${1}\.${2}\.${3}\.${4}'), '(?<=^|\.)0{0,2}', '') & @LF)
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
madmasles раньше, без регулярных выражений, у меня было так:
Код:
$Ip='172027003010'
ConsoleWrite(String(Number(StringLeft($Ip,3)))&'.'&String(Number(StringMid($Ip,4,3)))&'.'&String(Number(StringMid($Ip,7,3)))&'.'&String(Number(StringRight($Ip,3))))


Интересно, а по скорости где будет быстрее? Ваш или мой вариант?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Тоже маленький изврат. Пока не получилось с помощью одного паттерна избавится от точки в конце
Код:
$pattern = '(?:00(\d)|0(\d\d)|(\d{3}))'
ConsoleWrite(StringTrimRight(StringRegExpReplace('172027003010', $pattern, '$1$2$3.'), 1) & @LF)
ConsoleWrite(StringTrimRight(StringRegExpReplace('127000000000', $pattern, '$1$2$3.'), 1) & @LF)
ConsoleWrite(StringTrimRight(StringRegExpReplace('002027003010', $pattern, '$1$2$3.'), 1) & @LF)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
$vTest = '172027003010'
$sIP = StringRegExpReplace($vTest, '(?:00(\d)|0(\d\d)|(\d{3}))(?:00(\d)|0(\d\d)|(\d{3}))(?:00(\d)|0(\d\d)|(\d{3}))(?:00(\d)|0(\d\d)|(\d{3}))', '\1\2\3.\4\5\6.\7\8\9.\10\11\12')
MsgBox(64, @ScriptName, $sIP)
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
madmasles, edyapd, CreatoR спасибо за помощь! Использую одно из решений!
Тема решена.
 
Верх