net*_*der 252

用于以人类友好形式打印MAC-48地址的标准(IEEE 802)格式是六组,每个十六进制数字,用连字符-或冒号分隔:.

所以:

^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果它们以小写十六进制字母存储它将不匹配将组更改为[0-9A-Fa-f]以捕获这两种情况 (20认同)
  • 你可能也想忽略套管 (5认同)
  • ^([0-9A-发F] {2} [: - ]){5}([0-9A-发F] {2})$ (5认同)
  • 我认为这个正则表达式不正确,因为它还将“3D-F2-C9:A6-B3:4F”分类为有效的 MAC 地址,即使它不正确。正确的应该是: ((([a-zA-z0-9]{2}[-:]){5}([a-zA-z0-9]{2}))|(([a- zA-z0-9]{2}:){5}([a-zA-z0-9]{2}))) 这样每次您都可以为整个 MAC 地址选择“:”或“-”。 (3认同)
  • 另外,上面关于"标准格式"的引用来自维基百科,而不是802.3标准组织.IEEE 802-2014实际上为普通MAC地址(第8.1节3)指定了_hyphens_,为过时的位反转表示法(4)指定了_colons_.重要的是,在实践中,_没有人观察到这一点.我们只是使用其中一种,但绝不要将它们混合在一个书面MAC中. (2认同)

pil*_*row 21

眼睛有点硬,但是这个:

/^(?:[[:xdigit:]]{2}([-:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/
Run Code Online (Sandbox Code Playgroud)

将强制执行MAC表示法的所有冒号或所有破折号.

(A1:B2-C3:D4-E5:F6例如,更简单的正则表达式方法可能允许上述拒绝.)

  • @Xaisoft,`:xdigit:`代表十六进制数字,或多或少是另一种说法[a-fA-F0-9]。\\ 1指的是第一个破折号或冒号([-:])`的捕获组,并且仅匹配第一次匹配的捕获组。 (2认同)
  • +1可以同时使用捕获组和非捕获组,也可以使用```:xdigit:```(即使“简写”仅比```[a-fA-F0-9]短```和等效的```/ [a-f0-9] / i```更短!) (2认同)

小智 7

分隔符:" : "," - "," . "

双或单:00 = 0,0f = f

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

要么

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


exm: 00:27:0e:2a:b9:aa, 00-27-0E-2A-B9-AA, 0.27.e.2a.b9.aa ...
Run Code Online (Sandbox Code Playgroud)

  • 第二个将错误地匹配包含非十六进制字符(如g)的字符串. (2认同)

Ves*_*nev 7

这个正则表达式几乎匹配每种mac格式,包括思科格式 0102-0304-abcd

^([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:]]{2}$
Run Code Online (Sandbox Code Playgroud)

它匹配的示例字符串:

01:02:03:04:ab:cd
01-02-03-04-ab-cd
01.02.03.04.ab.cd
0102-0304-abcd
01020304abcd
Run Code Online (Sandbox Code Playgroud)

混合格式也将匹配!


JYe*_*ton 5

另请参阅这个问题

正则表达式如下:

^[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}$
Run Code Online (Sandbox Code Playgroud)

  • @Xaisoft:就像我在回答的评论中所说的那样,根据规范,混合冒号和连字符是有效的。 (2认同)

tch*_*ist 5

请注意,Unicode 属性\p{xdigit}包括 FULLWIDTH 版本。你可能更喜欢\p{ASCII_Hex_Digit}

如果您安装了某个古老的 CPAN 模块,那么问题的答案可能是最好的答案——输入:

% perl -MRegexp::Common -lE 'say $RE{net}{MAC}'
Run Code Online (Sandbox Code Playgroud)

我将它在此处输出的特定模式显示为幸运模式编号 13;还有很多其他的。

这个程序:

#!/usr/bin/env perl
use 5.010;
use strict;
use warnings qw<FATAL all>;

my $mac_rx = qr{
    ^ (?&MAC_addr) $
    (?(DEFINE)
        (?<MAC_addr>
                (?&pair) (?<it>  (?&either) )
            (?: (?&pair) \k<it> ) {4}
                (?&pair)
        )
        (?<pair>    [0-9a-f] {2} )
        (?<either>  [:\-]        )
    )
}xi;

while (<DATA>) {
    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
Run Code Online (Sandbox Code Playgroud)

生成此输出:

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
Run Code Online (Sandbox Code Playgroud)

这似乎是你正在寻找的那种东西。


Man*_*rai 5

链接可能对您有所帮助。你可以使用这个:(([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})