순진한 패턴
IPv4 주소가 점으로 분리된 숫자 넷: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}. 검증 위한 anchor: ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$.
이게 진짜 IP 아닌 999.999.999.999 받음. 각 octet 가 0-255.
엄격한 패턴
각 octet 0-255, 정규식으로 표현:
(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)
읽기: 25[0-5] (250-255), OR 2[0-4]\d (200-249), OR 1\d\d (100-199), OR [1-9]?\d (0-99 + optional 앞 자리).
풀 IPv4 + anchor:
^((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$
못생겼지만 정확.
OR — 표준 라이브러리에 시키기
실제 검증엔 IP 파싱 라이브러리: Python ipaddress.ip_address(s). IPv4, IPv6, CIDR notation, 정규식이 못 잡는 엣지 케이스 처리. 정규식이 IP-shape 문자열 FINDING 용; 라이브러리가 VALIDATING 용.
IPv6 — 시도조차 X
IPv6 가 4 hex 자리 8 그룹, 여러 압축 형태 (::, dotted-quad embedded). 정규식이 100 자 넘고 여전히 모든 유효 형태 못 잡음. Python 에 ipaddress, Go 에 net.ParseIP.