Skip to content

정규식 함수

Machbase는 PCRE(Perl Compatible Regular Expressions) 기반의 정규식 함수를 제공합니다. 모든 정규식 함수는 VARCHAR 타입 컬럼에서만 동작합니다.

빠른 참조

함수문법설명
REGEXP_LIKEREGEXP_LIKE(src, pat [, flag])패턴 일치 여부 확인
REGEXP_INSTRREGEXP_INSTR(src, pat [, pos [, occ [, ret [, flag]]]])패턴 일치 위치 반환
REGEXP_SUBSTRREGEXP_SUBSTR(src, pat [, pos [, occ [, flag]]])패턴 일치 부분 문자열 추출
REGEXP_REPLACEREGEXP_REPLACE(src, pat [, repl [, pos [, occ [, flag]]]])패턴 일치 문자열 치환

match_param (공통 파라미터)

설명
'c'대소문자 구분 (기본값)
'i'대소문자 무시

REGEXP_LIKE

문자열이 정규식 패턴과 일치하는지 검사합니다. WHERE 절에서 주로 사용하며 Boolean(1/0)을 반환합니다.

REGEXP_LIKE(source, pattern)
REGEXP_LIKE(source, pattern, match_param)
  • source: 검사할 VARCHAR 컬럼 또는 식
  • pattern: 상수 VARCHAR 정규식
  • match_param: 'c'(대소문자 구분, 기본) 또는 'i'(대소문자 무시)
-- 'error' 또는 'warn'을 포함하는 메시지 조회 (대소문자 무시)
SELECT *
  FROM sensor_text
 WHERE REGEXP_LIKE(message, 'error|warn', 'i');

-- 숫자로 시작하는 코드 조회
SELECT *
  FROM event_log
 WHERE REGEXP_LIKE(code, '^[0-9]+');

-- 이메일 형식 검증
SELECT name
  FROM users
 WHERE REGEXP_LIKE(email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$');

REGEXP_INSTR

정규식과 일치하는 위치를 반환합니다. 일치하는 값이 없으면 0을 반환합니다. 위치는 1부터 시작합니다.

REGEXP_INSTR(source, pattern)
REGEXP_INSTR(source, pattern, position)
REGEXP_INSTR(source, pattern, position, occurrence)
REGEXP_INSTR(source, pattern, position, occurrence, return_pos)
REGEXP_INSTR(source, pattern, position, occurrence, return_pos, match_param)
파라미터설명
source검사할 VARCHAR
pattern상수 VARCHAR 정규식
position검색 시작 위치 (1 이상, 기본값: 1)
occurrence찾을 몇 번째 일치 (1 이상, 기본값: 1)
return_pos0: 시작 위치, 1: 일치 문자열 다음 위치
match_param'c' 또는 'i'
-- 'The' 패턴의 위치 반환 (대소문자 무시, 첫 번째 발견, 다음 위치)
SELECT REGEXP_INSTR('TechOnTheNet', 'The', 1, 1, 1, 'i');
-- 결과: 10 (일치 문자열 'The' 다음 위치)

REGEXP_SUBSTR

정규식과 일치하는 부분 문자열을 반환합니다. 일치하는 값이 없으면 NULL을 반환합니다.

REGEXP_SUBSTR(source, pattern)
REGEXP_SUBSTR(source, pattern, position)
REGEXP_SUBSTR(source, pattern, position, occurrence)
REGEXP_SUBSTR(source, pattern, position, occurrence, match_param)
파라미터설명
source검사할 VARCHAR
pattern상수 VARCHAR 정규식
position검색 시작 위치 (1 이상, 기본값: 1)
occurrence찾을 몇 번째 일치 (1 이상, 기본값: 1)
match_param'c' 또는 'i'
-- 두 번째 모음 추출 (대소문자 무시)
SELECT REGEXP_SUBSTR('TechOnTheNet', 'a|e|i|o|u', 1, 2, 'i');
-- 결과: 'O'

-- IP 주소에서 첫 번째 옥텟 추출
SELECT REGEXP_SUBSTR(ip_str, '[0-9]+', 1, 1) FROM log_table;

-- 로그에서 오류 코드 추출
SELECT REGEXP_SUBSTR(message, 'ERR-[0-9]+') FROM event_log;

REGEXP_REPLACE

정규식과 일치하는 문자열을 지정한 문자열로 치환합니다.

REGEXP_REPLACE(source, pattern)
REGEXP_REPLACE(source, pattern, replacement)
REGEXP_REPLACE(source, pattern, replacement, position)
REGEXP_REPLACE(source, pattern, replacement, position, occurrence)
REGEXP_REPLACE(source, pattern, replacement, position, occurrence, match_param)
파라미터설명
source대상 VARCHAR
pattern상수 VARCHAR 정규식
replacement치환 문자열 (생략 시 일치 문자열 제거)
position검색 시작 위치 (1 이상, 기본값: 1)
occurrence0: 모든 일치 치환, 양수 n: n번째 일치만 치환 (기본값: 0)
match_param'c' 또는 'i'
-- 두 번째 모음을 'Z'로 치환 (대소문자 무시)
SELECT REGEXP_REPLACE('TechOnTheNet', 'a|e|i|o|u', 'Z', 1, 2, 'i');
-- 결과: 'TechZnTheNet'

-- 모든 숫자 제거
SELECT REGEXP_REPLACE(code, '[0-9]', '') FROM log_table;

-- 공백 정규화 (연속 공백을 단일 공백으로)
SELECT REGEXP_REPLACE(message, '\s+', ' ') FROM event_log;

PCRE 정규식 기초

패턴설명예시
.임의의 문자 1개a.c → abc, aXc
*0회 이상 반복ab*c → ac, abc, abbc
+1회 이상 반복ab+c → abc, abbc
?0 또는 1회colou?r → color, colour
^문자열 시작^error
$문자열 끝\.log$
[abc]문자 클래스[aeiou]
[^abc]부정 문자 클래스[^0-9]
\d숫자 ([0-9])\d+
\w단어 문자\w+
\s공백 문자\s+
a|ba 또는 berror|warn
(abc)그룹(foo)+
{n,m}n~m회 반복\d{3,5}

SEARCH / ESEARCH와의 차이

기능REGEXP_LIKESEARCH / ESEARCH
적용 타입VARCHARTEXT (전문 검색 인덱스)
정규식 지원O (PCRE)X (키워드 검색)
인덱스 활용XO
대용량 텍스트제한적권장

대용량 텍스트에서 키워드 검색이 필요하면 TEXT 타입과 SEARCH 절을 사용하는 것이 성능 면에서 유리합니다. 정규식 패턴 매칭이 필요한 경우 VARCHAR 컬럼과 REGEXP_LIKE를 사용합니다.

최근 업데이트