728x90
Java에서 MAC 주소를 추출할 일이 생겼다.
기존 로직에 문제가 있을 수도 있게다 싶어 검색하고 좀 더 나은 로직을 적용해봤다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MacAddressRegex {
/**
* 문자열에서 패턴에 맞는 문자열 즉 맥주소를 뽑아낸다.
* @param text 검사할 문자열
* @return 맥 주소
*/
public static String ParseMacAddress(String text) {
String result = null;
String[] list = text.split("\\p{XDigit}{2}(-\\p{XDigit}{2}){5}");
int index = 0;
for (String str : list) {
if (str.length() < text.length()) {
index = str.length();
result = text.substring(index, index + 17);
if (!result.equals("00-00-00-00-00-00")) {
break;
}
text = text.substring(index + 17);
}
}
return result;
}
public static boolean macValidate(String mac) {
Pattern p = Pattern.compile("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$");
Matcher m = p.matcher(mac);
return m.matches();
}
private static final String PATTERN = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$";
public static void main(String[] args) {
System.out.println("MAC ADDRESS 00:00:00:00:AB:BC "+macValidate("00:00:00:00:AB:BC"));
System.out.println("MAC ADDRESS 00:00:00:EF:AB:BC "+macValidate("00:00:00:EF:AB:BC"));
System.out.println("MAC ADDRESS 00:00:DE:EF:AB:BC "+macValidate("00:00:DE:EF:AB:BC"));
System.out.println("MAC ADDRESS 00:GH:DE:EF:AB:BC "+macValidate("00:GH:DE:EF:AB:BC"));
System.out.println("MAC ADDRESS 0a:02:00:00:AB:BC "+macValidate("0a:02:00:00:AB:BC"));
System.out.println("MAC ADDRESS 0A-00-27-00-00-11 "+macValidate("0A-00-27-00-00-11"));
System.out.println("MAC ADDRESS 18-C0-4D-DB-26-67 "+macValidate("18-C0-4D-DB-26-67"));
String str = "fhind18-C0-4D-DB-26-67dkdd";
str = "DSz00:1E:AE:4F:20:0BDntl3l";
String macaddress = ParseMacAddress(str); // 없으면 null 을 반환한다.
if(macaddress != null && macaddress.length() == 17){
System.out.println(macaddress);
} else {
System.out.println("문자열에 MAC 주소가 없어요.");
}
}
}
|
정규표현식 웹사이트 https://regexr.com/ 에서 직접 검증을 해볼 수 있다.
728x90
'정규표현식' 카테고리의 다른 글
Python 정규표현식 예제 (0) | 2022.02.06 |
---|---|
JQuery 정규표현식을 활용한 페이징 처리(전방탐색, 후방탐색X) (0) | 2021.08.08 |
PHP 정규표현식 후방탐색, 전방탐색 (0) | 2021.07.28 |
폰번호, 아이디, 이메일, 성명 등 마스킹처리 (PHP 정규표현식) (0) | 2021.07.28 |
55에서 255까지의 범위 정규식 (PHP 정규표현식) (0) | 2021.07.28 |