为了账号安全,请及时绑定邮箱和手机立即绑定

Regex match a mac address without semi-columns

Regex match a mac address without semi-columns

PHP
繁星coding 2022-12-23 14:26:26
我试图理解为什么下面的函数返回奇怪的结果<?$string = "001122334 001122334455 0011 0011223344556677";preg_match_all('/([a-fA-F0-9]){12}/', $str, $matches);?>我不明白为什么 001122334455 出现两次,为什么 5 5 在那里。我正在寻找没有半列匹配的 MAC 地址输出Array( [0] => Array    (        [0] => 001122334455        [1] => 001122334455    )[1] => Array    (        [0] => 5        [1] => 5    ))
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

你的正则表达式

  • 包含一个重复的捕获组([a-fA-F0-9]){12}, 即一个十六进制字符被捕获到一个组中,然后该组的值被重写了 11 次以上(总共 12 次),所以最后捕获的十六进制字符落在第二个匹配子数组(在您与输入字符串获得的每个匹配中,它是5,因此,您的第二个数组中有两个5s)。

  • 没有锚定在两边,所以它可以在字符串内的任何地方找到,所以你得到两个匹配项,001122334455被匹配并且001122334455in0011223344556677也被匹配。

删除捕获括号并使用整个单词匹配模式,如

# Word boundaries

preg_match_all('/\b[a-fA-F0-9]{12}\b/', $str, $matches)            

# Whitespace boundaries

preg_match_all('/(?<!\S)[a-fA-F0-9]{12}(?!\S)/', $str, $matches)   

# Hex char boundaries

preg_match_all('/(?<![a-fA-F0-9])[a-fA-F0-9]{12}(?![a-fA-F0-9])/', $str, $matches) 


查看完整回答
反对 回复 2022-12-23
  • 1 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信