IPv4 주소는 0.0.0.0부터 255.255.255.255까지다. 각 옥텟이 0-255 범위인지 정규표현식으로 검사할 수 있다.
간단한 패턴
^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ 이건 형식만 검사한다. 정규표현식 테스터에서 192.168.1.1을 넣으면 통과한다. 근데 999.999.999.999도 통과해버린다.
범위 검사 패턴
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ 이건 0-255 범위도 검사한다. 복잡하지만 정확하다.
실무 조언
정규표현식이 너무 복잡해지면 코드로 검사하는 게 나을 수 있다. split(.)으로 나눠서 각 부분이 0-255인지 체크하는 게 읽기 쉽다. 테스터로 두 방식을 비교해보자.
실무에서 자주 하는 실수
정규표현식을 처음 쓸 때 가장 흔한 실수가 특수문자 이스케이프를 빼먹는 거다. 점(.)을 문자 그대로 찾으려고 했는데 아무 문자나 다 매칭되는 상황. 항상 특수문자가 있으면 이스케이프가 필요한지 확인하자.
테스트 습관 들이기
정규표현식 테스터로 패턴을 작성하기 전에 먼저 테스트하는 습관을 들이면 실수를 크게 줄일 수 있다. 예상대로 동작하는지 여러 입력으로 확인하고 나서 코드에 적용하자. 그래야 나중에 디버깅 시간을 아낄 수 있다.
정규표현식이 만능은 아니다
모든 문자열 처리를 정규표현식으로 하려고 하면 오히려 복잡해진다. 단순한 작업은 문자열 메서드로, 복잡한 파싱은 전용 라이브러리로 하는 게 나을 수 있다. 적재적소에 사용하자.
정규표현식 테스터를 적극 활용해서 다양한 패턴을 실험해보자. 실전 경험이 쌓일수록 정규표현식 작성이 수월해진다.