정규표현식 020. IP 주소 유효성 검사 2

조회 수 10847 추천 수 0 2012.02.06 14:05:58
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

지난 회에 보여드린 정규식이죠? 이는 다음과 같이 작성할 수도 있습니다.

^((([0-9]{1,2})|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]{1,2})|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))$

이것 말고 다른 정규식도 얼마든지 가능합니다. 사실 정규식에는 정답이란 게 없거든요. 아주 간단한 문제가 아니라면 말입니다. 우선 첫 번째 정규식부터 하나씩 뜯어볼까요?

맨 앞의 ^ 기호가 들어가야 하는 이유는 지난 회에서 설명드렸으므로 생략합니다. 이어서 두 개의 둥근 괄호가 나오고 | 기호에 의해 숫자들이 죽 나열되어 있습니다. |는 or이니까 [0-9]이거나, 즉 한 자리 아무 숫자이거나 [1-9][0-9]이거나 즉, 두 자리 아무 숫자이거나가 됩니다. 그 다음 1[0-9]{2}는 1로 시작하는 세 자리 숫자를 의미합니다. 역시 아무 숫자나 올 수 있습니다. 2[0-4][0-9]는 2로 시작하되 두 번째 자리는 0-4이고 세 번째는 아무 숫자나 올 수 있다는 의미입니다. 25[0-5]는 25로 시작하되 세 번째 자리는 0-5까지 올 수 있다는 의미입니다.

그 다음에 괄호가 하나 끝나고 마침표(그냥 마침표는 메타문자이므로 이스케이프 처리했습니다)가 오고 {3}에 의해 이같은 문자열이 3번 반복됩니다. 그 다음에 이어지는 역시 두 개의 둥근 괄호는 앞의 괄호와 똑같은 구조이니 설명 생략입니다.

이렇게 하나씩 뜯어서 살펴보니 쉽죠? 사실 역참조니 조건절이니 하는 게 들어가지 않는 이상 아무리 길어봐야 복잡해 보이는 것일뿐 별거 없습니다. 그럼 두 번째 정규식도 마저 볼까요?

[0-9]{1,2}는 한 자리 숫자이거나 두 자리 숫자이거나라는 의미입니다. [0-9]|[1-9][0-9]와 전적으로 같은 의미입니다. 그 뒤로는 똑같으니 역시 설명 생략입니다.

List of Articles
번호 제목 글쓴이 날짜sort 조회 수
29 정규표현식 001. 맛보기 마라톤맨 2012-01-02 8360
28 정규표현식 002. 맛보기 심화 단계 마라톤맨 2012-01-03 6763
27 정규표현식 003. 맛보기 울트라 수퍼 심화 단계 마라톤맨 2012-01-04 6651
26 정규표현식 004. 정규표현식이란? 마라톤맨 2012-01-05 7504
25 정규표현식 005. 근데 어디다 쓰는 것인고? 마라톤맨 2012-01-06 6746
24 정규표현식 006. 메타문자 1 마라톤맨 2012-01-07 9061
23 정규표현식 007. 메타문자 2 마라톤맨 2012-01-08 12454
22 정규표현식 008. 메타문자 3 머니북 2012-01-09 7678
21 정규표현식 009. 메타문자 4 머니북 2012-01-10 6581
20 정규표현식 010. 웹 서버 설정에도 필요 머니북 2012-01-11 13410
19 정규표현식 011. 검색 문자 개수 지정하기 머니북 2012-01-12 21482
18 정규표현식 012. 검색할 위치 1 마라톤맨 2012-01-13 9499
17 정규표현식 013. 검색할 위치 2 마라톤맨 2012-01-16 9078
16 정규표현식 014. 최대 매치와 최소 매치 1 마라톤맨 2012-01-18 12621
15 정규표현식 015. 최대 매치와 최소 매치 2 마라톤맨 2012-01-20 9199
14 정규표현식 016. 하위 표현식 1 마라톤맨 2012-01-25 10301
13 정규표현식 017. 하위 표현식 2 마라톤맨 2012-01-27 8439
12 정규표현식 018. 하위 표현식 3 마라톤맨 2012-01-30 10114
11 정규표현식 019. IP 주소 유효성 검사 1 마라톤맨 2012-02-02 98670
» 정규표현식 020. IP 주소 유효성 검사 2 마라톤맨 2012-02-06 10847