Что такое регулярное выражение для MAC-адреса?

В этом формате:

3D:F2:C9:A6:B3:4F 

или:

 3D-F2-C9-A6-B3-4F 

Стандартный (IEEE 802) формат для печати адресов MAC-48 в удобной для пользователя форме – это шесть групп из двух шестнадцатеричных цифр, разделенных дефисами или двоеточиями :

Так:

 ^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$ 

Немного тяжело на глаза, но это:

 /^(?:[[:xdigit:]]{2}([-:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/ 

будет использовать все двоеточия или все тире для вашей нотации MAC.

(Более простой подход с регулярным выражением может, например, разрешить A1:B2-C3:D4-E5:F6 , что вышеперечисленное отклоняет.)

разделитель: ” : “, ” “, ” .

двойной или одиночный: 00 = 0, 0f = f

 /^([0-9a-f]{1,2}[\.:-]){5}([0-9a-f]{1,2})$/i 

или

 /^([0-9a-F]{1,2}[\.:-]){5}([0-9a-F]{1,2})$/ 

 exm: 00:27:0e:2a:b9:aa, 00-27-0E-2A-B9-AA, 0.27.e.2a.b9.aa ... 

Это регулярное выражение соответствует почти всем форматам Mac, включая формат Cisco, такой как 0102-0304-abcd

 ^([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:]]{2}$ 

Примеры строк, которые он соответствует:

 01:02:03:04:ab:cd 01-02-03-04-ab-cd 01.02.03.04.ab.cd 0102-0304-abcd 01020304abcd 

Смешанный формат также будет соответствовать!

Будьте \p{xdigit} что свойство Unicode \p{xdigit} включает версии FULLWIDTH. \p{ASCII_Hex_Digit} этого вы можете предпочесть \p{ASCII_Hex_Digit} .

Ответ на поставленный вопрос можно было бы лучше всего ответить – если у вас есть определенный почтенный модуль CPAN, набрав:

 % perl -MRegexp::Common -lE 'say $RE{net}{MAC}' 

Я показываю конкретный шаблон, который он выводит здесь как счастливый номер модели 13; есть много других.

Эта программа:

 #!/usr/bin/env perl use 5.010; use strict; use warnings qw; my $mac_rx = qr{ ^ (?&MAC_addr) $ (?(DEFINE) (? (?&pair) (? (?&either) ) (?: (?&pair) \k ) {4} (?&pair) ) (? [0-9a-f] {2} ) (? [:\-] ) ) }xi; while () { chomp; printf("%-25s %s\n", $_ => /$mac_rx/ ? "ok" : "not ok"); } __END__ 3D:F2:C9:A6:B3:4F 3D:F2:AC9:A6:B3:4F 3D:F2:C9:A6:B3:4F:00 :F2:C9:A6:B3:4F F2:C9:A6:B3:4F 3d:f2:c9:a6:b3:4f 3D-F2-C9-A6-B3-4F 3D-F2:C9-A6:B3-4F 

генерирует этот результат:

 3D:F2:C9:A6:B3:4F ok 3D:F2:AC9:A6:B3:4F not ok 3D:F2:C9:A6:B3:4F:00 not ok :F2:C9:A6:B3:4F not ok F2:C9:A6:B3:4F not ok 3d:f2:c9:a6:b3:4f ok 3D-F2-C9-A6-B3-4F ok 3D-F2:C9-A6:B3-4F not ok 

Кажется, что вы ищете.

Эта ссылка может вам помочь. Вы можете использовать это: (([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})

См. Также этот вопрос .

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

 ^[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$ ^[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}$ 
 /(?:[A-Fa-f0-9]{2}[:-]){5}(?:[A-Fa-f0-9]{2})/ 

Версия python может быть:

 re.compile(r'\A(?:[\da-f]{2}[:-]){5}[\da-f]{2}\Z',re.I) 
 /^(([a-fA-F0-9]{2}-){5}[a-fA-F0-9]{2}|([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}|([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})?$/ 

Регулярное выражение выше проверяет все типы адресов mac ниже:

 01-23-45-67-89-ab 01:23:45:67:89:ab 0123.4567.89ab 

Вы можете использовать следующую процедуру, передав MAC-адрес для проверки,

 private static final String MAC_PATTERN = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"; private boolean validateMAC(final String mac){ Pattern pattern = Pattern.compile(MAC_PATTERN); Matcher matcher = pattern.matcher(mac); return matcher.matches(); } 

PHP-люди:

 print_r(preg_match('/^(?:[0-9A-F]{2}[:]?){5}(?:[0-9A-F]{2}?)$/i', '00:25:90:8C:B8:59')); 

Нужно пояснение: http://regex101.com/r/wB0eT7

Если вам нужны пробелы между числами, как этот вариант

 3D : F2 : C9 : A6 : B3 : 4F 

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

 "^([0-9A-Fa-f]{2}\\s[:-]\\s){5}([0-9A-Fa-f]{2})$" 

для соответствия как 48-разрядным MAC-адресам EUI-48, так и 64-разрядным MAC-адресам EUI-64:

 /\A\h{2}([:\-]?\h{2}){5}\z|\A\h{2}([:\-]?\h{2}){7}\z/ 

где \ h – символ в [0-9a-fA-F]

или:

 /\A[0-9a-fA-F]{2}([:\-]?[0-9a-fA-F]{2}){5}\z|\A[0-9a-fA-F]{2}([:\-]?[0-9a-fA-F]{2}){7}\z/ 

это позволяет использовать «-» или «:» или не использовать разделитель

для PHP-разработчика

 filter_var($value, FILTER_VALIDATE_MAC) 

Возможно, как можно скорее:

 /([\da-f]{2}[:-]){5}[\da-f]{2}/i 

лучший ответ для регулярного выражения для проверки MAC-адресов

 ^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$ 
  • Шаблон регулярного выражения для соответствия, Исключая, когда ... / За исключением между
  • Регулярное выражение: числовой диапазон
  • Регулярные выражения Python из re-модуля поддерживают границы слов (\ b)?
  • Регулярное выражение для принудительного применения сложных паролей, соответствующих 3 из 4 правил
  • Как отменить определенное слово в регулярном выражении?
  • Разбиение строки на первом пространстве
  • Почему class диапазона символов соответствует подчеркиванию?
  • Извлеките информацию внутри всех скобок в R
  • Исключить символы из classа символов
  • Регулярное выражение для соответствия внешним скобкам
  • Как совместить «все до этой последовательности символов» в регулярном выражении?
  • Давайте будем гением компьютера.