我有一個表示MAC地址的字符串,但如果它爲零,則不會顯示每個地址項的高階字節。也就是說,我不會使用表格00:11:22:33:44:55
的地址,而是使用表格0:11:22:33:44:55
的地址;而不是形式爲00:1b:17:00:0b:31
的地址,它的格式爲0:1b:17:0:b:31
。正則化MAC地址的Java正則表達式
我想將缺少MAC地址的高位字節(如果該高位字節爲零)的字符串轉換爲明確包含其高位字節的字符串。很顯然,我可以將輸入的字符串拆分爲:
,然後遍歷每個元素。但是我認爲使用正則表達式(特別是字符串的replaceAll方法)可能會更乾淨/更快。但是,我寫的正則表達式不起作用。作爲示例,
String original = "0:1b:17:0:b:31";
String replaced = original.replaceAll("(^|:)([0-9a-f])(:|$)","$10$2$3");
System.out.println(replaced);
打印00:1b:17:00:b:31
。本質上,它沒有插入最後一個b
的高位字節。我認爲這是因爲我使用的正則表達式具有重疊匹配:如果有兩個或更多項缺少高階,則用於限定一個匹配結束的冒號還必須用於分隔後續匹配的開始字節。
有沒有辦法允許使用Java的正則表達式重疊匹配?或者,是否有一個我沒有想到的可以在此使用的正則表達式?或者我真的必須採取多線方法(例如,字符串分割和迭代,多次使用上述正則表達式,直到結果與輸入相同爲止等等)。
您需要更換'\ B([\ DA-F])(? = :)'with'0 $ 0' – naomik
hahaha'不可怕的環視:)' – vks
好吧然後'\ b([\ da-f]):'用'0 $ 0:'然後... – naomik