문제
다음 SQL의 실행 결과로 가장 적절한 것은?
SQLSELECT REGEXP_SUBSTR('abcd', 'b\*c') AS COL1, REGEXP_SUBSTR('abcd', 'b*c') AS COL2 FROM DUAL;
① NULL, bc ② bc, NULL ③ bc, bc ④ NULL, NULL
정답
1번
해설
정답: 1. 'b*c'는 문자 그대로 bc를 찾으므로 매칭되지 않아 NULL이고, 'bc'는 b가 0회 이상 반복된 뒤 c가 오는 패턴으로 bc에 매칭된다.
오답 풀이
- 1번: 정규식 해석에 맞는 결과이다.
- 2번: 이스케이프된 별표와 메타문자 별표의 의미를 반대로 해석했다.
- 3번: 원문 문자열에 b*c가 없으므로 COL1은 bc가 아니다.
- 4번: COL2는 bc에 매칭된다.
보충 개념 정규식에서 *는 앞 문자가 0회 이상 반복됨을 의미한다. 문자 그대로의 *를 찾으려면 이스케이프 처리가 필요하다.