首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是MAC地址的正则表达式?

什么是MAC地址的正则表达式?
EN

Stack Overflow用户
提问于 2010-11-24 04:17:02
回答 18查看 197.1K关注 0票数 144

格式如下:

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

或者:

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

回答 18

Stack Overflow用户

发布于 2010-11-24 04:25:59

有点刺眼,但这是:

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

将强制MAC表示法的所有冒号或所有破折号。

(例如,一种更简单的正则表达式方法可能会允许A1:B2-C3:D4-E5:F6,而上面的方法拒绝了它。)

票数 27
EN

Stack Overflow用户

发布于 2014-01-30 20:51:35

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

^([[: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

混合格式也将匹配!

票数 9
EN

Stack Overflow用户

发布于 2010-11-24 09:03:45

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

如果您安装了某个受人尊敬的CPAN模块,那么最好的答案可能是输入以下命令:

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

我将它输出的特定模式here显示为幸运模式数字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

生成以下输出:

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

这似乎就是你要找的东西。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4260467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档