我已经回答了验证 mac 地址的问题,但它们是 48 位 mac 地址独有的。 我正在寻找可以验证 8 字节或 64 位 mac 地址的正则表达式。一个 64 位 mac 地址看起来像这样:(基本上比 48 位多 4 个十六进制数字)
00:13:a2:00:41:8b:93:7a
0013a200418b937a
AD:12:13:FC:14:EE:FF:FF
ad-12-13-fc-14-ee-ff-ad
根据验证 48 位 mac 地址的答案,我想出了这个,但我正在寻找更简单的东西。
^((([0-9A-Fa-f]{2}:){7})|(([0-9A-Fa-f]{2}-){7})|([0-9A-Fa-f]{14}))([0-9A-Fa-f]{2})$
您可以使用([-:]?)
捕获分隔符,该分隔符允许用冒号,短划线或其他任何内容分隔数字。然后,对于连续匹配项,请使用1
反向引用来确保分隔符一致。这将减少重复性。
^[0-9A-Fa-f]{2}([:-]?)(?:[0-9A-Fa-f]{2}1){6}[0-9A-Fa-f]{2}$
试试这个:
^((?:[0-9A-Fa-f]{2}(?:[:-]?)){7}(?:[0-9A-Fa-f]{2}))$
正则表达式演示
这已经排除了 3 个选项,其中:
、-
和null
作为 2 个十六进制数字之间的组分隔符。
它还删除了不必要的括号和不必要的捕获组。
或者,您可以关闭区分大小写并使用负前瞻:
^(?!.*[_G-Z])ww([:-]?)(?:ww1){6}ww$
查看在线 Java 演示
^
- 开始字符串锚点。(?!.*[_G-Z])
- 负前瞻以防止下划线或任何字符 G-Z。ww
- 匹配两个单词字符(w
等于[0-9A-Za-z_]
)。([:-]?)
- 捕获可选的冒号或连字符。(?:
- 打开非捕获组:ww1
- 两个单词字符和一个对我们的捕获组的反向引用。){6}
- 关闭非捕获组并匹配 6 次。
ww
- 匹配两个单词字符。$
- 结束字符串锚点。