홈 › SQL 고급 › 09 / 10

정규식 함수

REGEXP_LIKE, REGEXP_SUBSTR, REGEXP_REPLACE, REGEXP_INSTR
섹션 6진행 0 / 10

2. 핵심 원리

2.1 네 함수

함수 하는 일 반환
REGEXP_LIKE(문자열, 패턴 [, 옵션]) 패턴에 맞는지 검사 참·거짓
REGEXP_SUBSTR(문자열, 패턴 [, 시작 [, n번째 ...]]) 맞는 부분 문자열 추출 문자열, 없으면 NULL
REGEXP_INSTR(문자열, 패턴 [, 시작 [, n번째 ...]]) 맞는 부분의 시작 위치 숫자, 없으면 0
REGEXP_REPLACE(문자열, 패턴, 바꿀 값 [, ...]) 맞는 부분을 바꿈 문자열

REGEXP_LIKE 는 WHERE 조건으로 쓰는 것이 기본입니다. Oracle 의 REGEXP_LIKE 는 값을 돌려주는 함수가 아니라 조건이라서, 23ai 이전에는 SELECT 목록에 그대로 쓰면 오류이고 CASE WHEN REGEXP_LIKE(...) THEN ... END 로 감쌉니다. MySQL 은 1·0 을 돌려주므로 SELECT 목록에 바로 씁니다.

2.2 자주 쓰는 패턴 기호

기호 뜻 예
^ $ 문자열의 처음, 끝 ^010
[0-9] 숫자 한 글자 [0-9]{4}
[^0-9] 숫자가 아닌 한 글자 [^0-9]
{n} {n,m} 반복 횟수 [0-9]{3,4}
? + * 0~1회, 1회 이상, 0회 이상 -?
( ) \1 묶음과 그 값을 다시 쓰는 역참조 ([0-9]{3})-
\d \w 숫자, 단어 문자 약어 \d{4}

패턴을 ^ 와 $ 로 감싸지 않으면 문자열 어디에든 맞는 부분이 있으면 참입니다. 형식 검증은 거의 항상 ^ ... $ 로 감쌉니다.

2.3 DB 별 지원

기능 Oracle·Tibero MySQL MSSQL
REGEXP_LIKE SUBSTR INSTR REPLACE 10g 부터 8.0 부터 2022 이하 없음
REGEXP_COUNT 11g 부터 없음 없음
옛 연산자 없음 REGEXP, RLIKE 없음
대체 수단 - - LIKE 의 [ ], PATINDEX

Oracle 은 POSIX ERE 기반에 \d, \w 같은 Perl 식 약어를 지원하지만 전방 탐색(lookahead)은 없습니다. MySQL 은 8.0.4 부터 ICU 라이브러리를 씁니다. 5.7 이하의 REGEXP 는 바이트 단위라 한글 같은 멀티바이트 문자에 안전하지 않습니다. MSSQL 은 2022 이하에 정규식 함수가 없고 SQL Server 2025 에서 REGEXP_LIKE 등이 추가됐다고만 알아 둡니다.

옵션 인자는 'i'(대소문자 무시), 'c'(대소문자 구분), 'n'(. 이 줄바꿈에도 맞음), 'm'(여러 줄 모드)입니다. Oracle 은 옵션 인자, MySQL 은 match_type 인자라고 부르며 의미는 같습니다.

핵심

정규식 함수는 검증(REGEXP_LIKE), 추출(REGEXP_SUBSTR), 위치(REGEXP_INSTR), 치환(REGEXP_REPLACE)입니다. 형식 검증은 패턴을 ^ 와 $ 로 감싸야 합니다.