패턴 나머지도 유연할 때만 중요
Greedy 와 lazy 는 패턴 나머지가 명확할 때 같은 결과. \d+abc 와 \d+?abc 는 1234abc 에 같은 매칭 — 가능한 매칭 한 가지뿐.
차이가 보이는 건 패턴 경계가 흐릿할 때: 엔진이 다음에 찾는 게 여러 위치에 등장할 수 있을 때. 그러면 greedy 는 마지막 가능 위치, lazy 는 첫 위치에 멈춤.
경험칙 셋
1. 마커 사이 추출? Lazy 또는 negated class. 태그, 따옴표 문자열, 주석, 괄호 친 거 다. 첫 닫는 마커가 원하는 거.
2. 고정 모양 입력 검증? Greedy OK, 종종 더 좋음. 전화번호, 날짜, ID — 매칭 한 방법뿐. Greedy 가 성공 케이스에 backtrack 약간 적게.
3. 노이즈 텍스트에서 한 번 검색? Greedy 기본. 로그, 자유 형식 문서. 보통 "패턴에 맞는 만큼" 원함, 그게 진짜 값일 가능성 크니까.
'그냥 모름' 기본값
결정 못 하면 greedy 먼저 작성, 실제 입력에 매칭하는 거 확인. 너무 먹으면 lazy 또는 negated class 로 전환. "안전하게 들리니까" 미리 lazy 손 뻗지 마 — 때론 greedy 가 실제 원하는 거.