Преобразовать формат MAC-адреса

Я только что написал небольшой скрипт для извлечения сотен MAC-адресов из коммутатора для сравнения, однако они отформатированы как «0025.9073.3014», а не как «00: 25: 90: 73: 30: 14».

Я поставлен в тупик о том, как преобразовать это, где лучшее, что я могу придумать, это разбить их на части в «.», Затем разбить их на две части, а затем соединить все части с разделителями «:».

Я в порядке с хакерскими методами, но это беспокоит меня, потому что это очень плохой подход. Есть ли способ сделать это лучше?

3

Решение

Сочетание str_replace а также preg_replace:

$str = preg_replace('~..(?!$)~', '\0:', str_replace(".", "", $str));

Первый зачистка . затем добавление : после .. два любых персонажа (?!$) если не в конце.

Тест на eval.in


Или используйте группа захвата и сделать это без str_replace:

$str = preg_replace('~(..)(?!$)\.?~', '\1:', $str);

Тест на regex101.com

Там не так много различий в производительности.

3

Другие решения

Если вам не нравятся регулярные выражения, то вот еще один способ сделать это, который более понятен, если вы новичок в PHP. По сути, он просто удаляет точки, а затем разбивает строку на массив после каждых 2 символов, а затем вставляет их в двоеточие:

$string = "0025.9073.3014";
$result = implode(":", str_split(str_replace(".", "", $string), 2));
echo $result;

Выходы:

00: 25: 90: 73: 30: 14

3

С помощью preg_replace с захват групп, обратные ссылки:

$mac = "0025.9073.3014";
$mac = preg_replace('/(..)(..)\.(..)(..)\.(..)(..)/',
'$1:$2:$3:$4:$5:$6', $mac);
echo($mac);
// => 00:25:90:73:30:14
1

Другой вариант, если mac-адрес является постоянным в этом формате.

$str = '0025.9073.3014';
$str = preg_replace('~\d+\K(?=\d\d)|\.~', ':', $str);
echo $str; //=> "00:25:90:73:30:14"
0
По вопросам рекламы [email protected]