안녕하세요. 제임스 입니다.
이번 포스팅에서는 자바 정규표현식을 이용하여 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
'Java' 카테고리의 다른 글
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 로또 번호 패턴 만들기 (1220) | 2018.07.02 |
---|---|
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 주민등록번호 패턴 만들기 (1549) | 2018.06.29 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 휴대폰 번호 패턴 만들기 (1184) | 2018.06.26 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 이메일 주소 패턴 만들기 (471) | 2018.06.22 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 암호 패턴 만들기 (11) | 2018.06.21 |