문제
SQLSELECT REGEXP_REPLACE('ABC123DEF456GHI', '([A-Z]+)([0-9]+)', '\2-\1') FROM DUAL; 실행 결과는?
① ABC-123DEF-456GHI ② 123-ABCDEF456GHI ③ 123-ABC456-DEFGHI ④ ABC123-DEF456-GHI
정답
3번
해설
패턴 ([A-Z]+)([0-9]+)는 "대문자 그룹(\1) + 숫자 그룹(\2)"을 의미하며, 치환식 \2-\1은 두 그룹의 순서를 바꾸고 사이에 하이픈을 넣습니다. Oracle의 REGEXP_REPLACE는 기본적으로 매칭되는 모든 구간을 치환합니다. 문자열 'ABC123DEF456GHI'를 왼쪽부터 스캔하면 ABC123과 DEF456 두 구간이 패턴에 매칭되며, 각각 123-ABC, 456-DEF로 치환됩니다. 마지막 GHI는 뒤에 숫자가 없어 패턴을 만족하지 못하므로 그대로 남습니다. 결과를 이어 붙이면 123-ABC + 456-DEF + GHI = 123-ABC456-DEFGHI 이므로 정답은 ③ 입니다.