'자바 정규표현식 IP 주소'에 해당되는 글 1건



안녕하세요. 제임스 입니다. 


이번 포스팅에서는 자바 정규표현식을 이용하여 IP 주소 패턴을 만들어 보겠습니다. 

IP 주소 패턴은 앞서 작성한 포스팅을 보셨다면 아마 간단하게 만드실 수 있을 것이라 생각 됩니다. 


지금부터 시작해 보겠습니다. 



■ 정규표현식으로 IP 주소 패턴 만들기



IP 주소는 다음과 같은 형식을 취하고 있습니다. 


xxx . xxx . xxx . xxx


이는 우리가 일반적으로 많이 사용하고 있는 IP Version 4 (IPv4) 주소 체계입니다. 


각 옥텟의 xxx 값은 0 ~ 255 까지의 숫자가 올 수 있습니다. 

즉, 0.0.0.0 부터 255.255.255.25 까지의 주소가 가능합니다. 



첫번째 옥텟을 지정해 보겠습니다. 


각각의 자리에 따라 맥스 값이 다릅니다. 그리고 경우에 따라 서로 다른 값이 와야 하는 경우도 있습니다. 

예를 들면 첫자리는 0 ~ 2 까지만 올 수 있으며, 첫자리가 2일 경우 두번째 자리는 5를 넘을 수 없고, 첫자리가 1일 경우 두번째 자리는 제한이 없습니다. 


그렇기 때문에 각각의 경우의 수를 생각하고 작성해야 합니다. 



[01]?\\d?\\d

첫번째 자리는 0 또는 1만 허용하고 0 또는 1이 존재 하거나 존재하지 않아도 됩니다. 

두번째 자리는 숫자를 허용하며 값이 존재하거나 하지 않아도 됩니다. 

참고로 \d 라는 값은 [0-9] 와 동일 합니다. 

세번째 자리는 숫자를 허용하며 무조건 존재 해야 합니다. 


위 표현식으로 처리 할 수 있는 값의 범위는 0 ~ 199 까지 입니다. 


이제 남은 200 ~ 255 까지의 숫자를 처리 하면 되겠죠? 



2[0-4]\\d

첫번째 자리는 2 로 고정했습니다. 

두번째 자리는 0 ~ 4 까지의 값만 허용 합니다. 

세번째 자리는 0 ~ 9 까지의 값을 모두 허용 합니다. 


위 두번째 표현식은 200 ~ 249 까지의 값을 표현 합니다. 


이제 남은 값은 250 ~ 255 까지 입니다. 



25[0-5]

첫번째 자리는 2로 고정

두번째 자리는 5로 고정 했습니다. 

세번째 자리만 0 ~ 5 까지의 값을 허용 했습니다. 


이렇게 해서 남은 200 ~ 255 까지의 값을 커버 했습니다. 



이제 각각의 표현식을 합쳐 보겠습니다. 



[01]?\\d?\\d|2[0-4]\\d|25[0-5]

각각의 표현식을 or 를 뜻하는 " | " 기호를 이용하여 나열 했습니다. 


([01]?\\d?\\d|2[0-4]\\d|25[0-5])

여기에 ( ) 를 이용하여 감싸서 하나의 문장으로 지정 했습니다. 



여기까지가 하나의 옥텟을 정의 한 표현식입니다. 



^([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\.([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\.([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\.([01]?\\d?\\d|2[0-4]\\d|25[0-5])$

이 표현식을 네번 나열하고 IP 주소를 표현할때 사용하는 마침표 ( . )를 이용하여 표현식을 수정했습니다.

그리고 마지막으로 표현식의 시작과 끝을 알리는 ^ 과 $ 를 추가 했습니다. 




위 표현식을 이용한 샘플 코드를 보겠습니다. 


1
2
3
4
String regExp = "^([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\."
                + "([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\."
                + "([01]?\\d?\\d|2[0-4]\\d|25[0-5])\\."
                + "([01]?\\d?\\d|2[0-4]\\d|25[0-5])$";
cs


위에서 정의한 값을 적용 했습니다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
String ipNum1 = "127.0.0.1";
System.out.println("IP 주소 1 테스트 결과 ==> " + ipNum1.matches(regExp));
        
String ipNum2 = "0.0.0.0";
System.out.println("IP 주소 2 테스트 결과 ==> " + ipNum2.matches(regExp));
        
String ipNum3 = "255.255.255.255";
System.out.println("IP 주소 3 테스트 결과 ==> " + ipNum3.matches(regExp));
        
String ipNum4 = "0-0-0-0";
System.out.println("IP 주소 4 테스트 결과 ==> " + ipNum4.matches(regExp));
        
String ipNum5 = "256.0.0.1";
System.out.println("IP 주소 5 테스트 결과 ==> " + ipNum5.matches(regExp));
cs


ipNum1, ipNum2 및 ipNum3 은 정상 범위의 IP 주소 값입니다. 

하지만 네번째는 허용하지 않는 문자값이 들어 갔습니다. 

마지막은 주소 범위가 255를 벗어나 256이 입력 되어 있습니다. 


위 코드 실행 결과는 아래와 같습니다. 


Results


IP 주소 1 테스트 결과 ==> true

IP 주소 2 테스트 결과 ==> true

IP 주소 3 테스트 결과 ==> true

IP 주소 4 테스트 결과 ==> false

IP 주소 5 테스트 결과 ==> false



위 표현식은 IP Version 4 (IPv4) 를 기준으로 작성 했습니다. 

하지만 IP Version 6 (IPv6) 도 간단하겠죠? 

그냥 처음에 작성한 코드를 두번만 더 붙여 주면 끝납니다 ^^



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,