선택 연산자의 범위는 넓어
|는 우선순위가 낮아서 양쪽 표현을 가장 가까운 그룹 경계나 패턴 끝까지 대안으로 묶어. 범위를 눈으로 확인하기 어렵다면 비캡처 그룹으로 의도를 드러내.
abc|xyz는 abc 전체 또는 xyz 전체를 뜻해. 반면 a(bc|xy)z는 앞의 a와 뒤의 z를 공통으로 두고 가운데 대안을 캡처해.
여러 대안 이어 쓰기
red|green|blue|yellow처럼 파이프를 이어 네 단어 중 하나를 매칭할 수 있어. 대안이 한 글자씩이라면 문자 클래스가 더 간결한지, 공통 접두사나 접미사가 있다면 그룹 밖으로 뺄 수 있는지 살펴봐.
앵커와 함께 쓸 때는 그룹이 중요해
^foo|bar$는 ^foo 또는 bar$로 해석돼. 전체 문자열이 foo나 bar인지 검사하려면 ^(?:foo|bar)$처럼 대안을 먼저 묶어야 해.
빈 대안과 선택 수량자는 결과가 다를 수 있어
(?:foo|)와 (?:foo)?는 같은 문자열 집합을 매칭하지만, 캡처 그룹을 사용하면 빈 대안은 빈 문자열을 캡처하고 선택 그룹은 아예 참여하지 않을 수 있어. 단순히 조각 하나가 선택 사항이라면 (?:foo)?가 의도를 더 잘 보여 줘.