亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 102 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號