이거 OR 저거 매칭
파이프 글자 | 는 OR. cat|dog 는 부분 문자열 'cat' 또는 'dog' 매칭. 엔진이 왼쪽에서 오른쪽으로 각 대안 시도; 첫 매칭 win.
순서 중요
대부분 정규식 엔진은 longest-match 아님 — first-match. 패턴 cat|cats 입력 'cats' 는 'cat' 만 매칭, 그게 먼저 시도되니까. 더 긴 거 매칭하려면 먼저: cats|cat.
이건 awk 의 POSIX longest-match 동작과 반대. 본인이 쓸 대부분 엔진 (Python, JS, PCRE) 은 first-match.
항상 alternation 그룹
괄호 없으면 alternation 이 양쪽으로 가능한 만큼 확장. 패턴 cat|dog 만이면 OK. 하지만 my cat|dog 는 "my cat" 또는 "dog" 의미 — "my (cat or dog)" 아님. 후자면 wrap: my (?:cat|dog).
이게 입문 정규식 #1 alternation 버그.
성능: alternation 비쌈
엔진이 모든 위치에 모든 대안 시도. 긴 리스트는 character class 가 극적으로 빠름: [abcde] 가 (?:a|b|c|d|e) 이김. 클래스에 안 맞는 멀티 글자 대안에 alternation 사용.