2015-08-26 175 views
0

「有效」MAC地址是6組十六進制字符對,由短劃線或冒號分隔。有效MAC地址的正則表達式:not 88 | 87 | FF | 00

實施例:

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

然而, 「無效」 的MAC地址包含十六進制對是00FF8887

例子:

00-00-00-00-00-00 
FF-FF-FF-FF-FF-FF 
88-88-88-88-87-88 

這是我走到這一步:

(?!8)([0-9A-F]{2})([:-][0-9A-F]{2}){5} 

但由於某些原因,我不知道爲什麼,我不能使用:

(?!88|87|FF|00) 

對於正則表達式的否定部分。

注意:不是重複的SO條目,因爲它查找無效的十六進制對並排除它們。

+0

規則是否規定單個字節值不能是'00',FF','88'或者87,或者整個字符串不能是'87-87-87-87-87-87' ? – Dai

+1

不,這個問題對於4字節模式有一個特定的附加規則,而這正是導致此問題的模式。 – MSalters

+0

爲什麼你必須在一個正則表達式中做到這一點?驗證MAC地址,然後使用第一個測試中的捕獲組測試無效組合。 –

回答

2

在整個輸入使用負前瞻:

^((?!00|FF|88|87)[0-9A-F]{2}([:-]|$)){6}$ 

live demo

請注意,如何通過對分隔符或輸入結束使用替換來簡化正則表達式。

+0

翻轉真棒!尤其是分隔符或輸入的結束方式,您可以準確重複該組所需的次數。你搖滾!謝謝。 – Vippy

+0

@Vippy你的編輯改變了匹配,所以我只想檢查:FF-F2-C9-A6-88-4F是否「有效」(有些術語是「好」,有些是「壞」)? – Bohemian