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)입니다. 형식 검증은 패턴을^와$로 감싸야 합니다.