通过 RegEx 查找部分 MAC 地址

Find partial MAC address via RegEx

对于我的应用程序,我需要一个 RegEx,它可以找出一个字符串是否 至少 部分是 MAC 地址,但到目前为止我只找到了以下 RegEx 仅查找是否是完整的 MAC 地址

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

什么是 RegEx(可能源自上述那个)returns 完全匹配这 3 个字符串:

  1. 93:31:13:E1:D3:1A
  2. 3E-EB-47-8
  3. 84:0C:

虽然没有返回这 2 个字符串的匹配项:

  1. 6B-90-8Y-31-D1-7K
  2. 37-4H-31

注意:我不会说这是 THIS 问题的 "practical" 副本,因为

  1. 尽管已有 6 年历史,但该问题从未成功回答
  2. 该问题针对特定引擎
  3. 该问题的
  4. None 个答案适用于上述 all/any 个案例

如果你想用一种定界符匹配部分 MAC 地址,你可以使用

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

参见regex demo

要匹配字符串中混有 -: 的 MAC 地址,您可以使用

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

参见 this regex demo

正则表达式详细信息

这里的

MAC地址可以由6个:-分隔的2-hex char部分组成,作为一种匹配。

  • ^ - 字符串的开头
  • [0-9A-Fa-f]{1,2} - 1 或 2 个十六进制字符
  • (?:
    • (?::[0-9A-Fa-f]{0,2}){0,5} - : 重复 0 到 5 次,后跟 0 到 2 个十六进制字符
    • | - 或
    • (?:-[0-9A-Fa-f]{0,2}){0,5} - - 重复 0 到 5 次,后跟 0 到 2 个十六进制字符
  • ) - non-capturing 交替组结束
  • $ - 字符串结尾。