여러 텍스트 도구가 공유하는 패턴 언어
정규표현식은 grep, sed, awk, 편집기와 프로그래밍 언어에서 문자열의 모양을 표현해. 기본 개념은 비슷하지만 도구마다 지원 문법과 이스케이프 규칙이 달라. 패턴이 어느 정규식 방언으로 해석되는지, 셸 인용이 먼저 적용되는지 함께 확인해야 같은 표현을 다른 도구로 옮길 때 뜻이 바뀌지 않아.
문자와 위치를 표현하는 기본 요소
.: 보통 줄바꿈을 제외한 글자 하나와 맞아.[abc]: a, b, c 가운데 하나와 맞는 문자 클래스야.[^abc]: 나열한 문자 이외의 글자 하나와 맞아.[a-z]: 범위를 표현하지만 로케일에 따라 의미가 달라질 수 있어.^와$: 줄의 시작과 끝을 가리켜.\b,\d,\w: PCRE 계열에서 단어 경계, 숫자, 단어 문자를 표현해. POSIX 도구에서는 그대로 지원되지 않을 수 있어.
반복 횟수를 수량자로 적어
*: 앞 요소가 0번 이상 나타나.+: 1번 이상 나타나. ERE나 PCRE에서 사용해.?: 0번 또는 1번 나타나.{3}: 정확히 세 번 나타나.{2,5}: 두 번에서 다섯 번 사이로 나타나.
BRE에서는 일부 기호 앞에 백슬래시가 필요하므로 같은 패턴을 grep과 grep -E에서 비교해 봐.
그룹과 선택으로 더 큰 단위를 만들어
(foo|bar)는 foo 또는 bar를 선택하고, ([0-9]+)처럼 괄호로 묶은 부분은 구현에 따라 캡처 그룹이 돼. 치환식의 \1 같은 역참조는 앞에서 잡은 값을 다시 사용할 수 있어. 그룹, 선택, 역참조의 표기는 방언마다 다르므로 도구의 문서를 기준으로 삼아.
BRE, ERE, PCRE를 구분해
- BRE: 전통적인 grep과 sed의 기본 문법이야. 일부 연산자는 백슬래시가 필요해.
- ERE:
grep -E,sed -E에서 쓰며 그룹과 선택을 더 직접적으로 표현해. - PCRE: 전방·후방 탐색, 이름 있는 그룹 등 더 많은 기능을 제공하지만 모든 grep 구현이
-P를 지원하지는 않아.
“정규식”이라는 이름 하나로 호환성을 가정하지 말고 실행 도구와 버전을 기록해.
실전 패턴은 검증 범위를 설명해야 해
[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}
\b([0-9]{1,3}\.){3}[0-9]{1,3}\b
[0-9]{4}-[0-9]{2}-[0-9]{2}
[[:space:]]+$이 패턴들은 이메일처럼 보이는 문자열, IPv4처럼 보이는 문자열, ISO 날짜 모양과 줄 끝 공백을 찾는 필터야. 주소의 실제 존재나 IP 숫자의 유효 범위까지 보장하지는 않아. 형식 후보를 찾는 정규식과 의미를 검증하는 파서를 분리해.