alt

[SQLD 특강] 정규식 표현편

2026년 11월 9일 공유

정규식 표현과 SQL 활용

개요

정규식은 여러 문자열에 공통으로 나타나는 패턴을 규칙으로 표현하는 방법이다. 문자열마다 위치나 길이가 달라도 같은 패턴을 기준으로 문자를 추출·치환·삭제하거나, 위치와 개수를 확인할 수 있다.

핵심 개념

  • 문자 클래스
  • \d: 숫자, \D: 숫자가 아닌 문자
  • \w: 문자·숫자·밑줄(_), \W: 그 외 문자
  • \s: 공백 문자, \S: 공백이 아닌 문자
  • 대괄호 []: 괄호 안에서 한 글자를 선택한다. 예: [AB]는 A 또는 B 한 글자
  • 범위 지정: [a-z], [A-Z], [A-Za-z]
  • 대괄호 안의 ^는 뒤따르는 문자들을 제외한다. 예: [^AB]는 A와 B가 아닌 한 글자
  • 반복 횟수
  • ?: 0회 또는 1회
  • *: 0회 이상
  • +: 1회 이상
  • {n}: 정확히 n회, {n,}: n회 이상, {n,m}: n회 이상 m회 이하
  • +는 대상 문자가 반드시 있어야 하지만 *는 없어도 된다.
  • 위치와 기타 표현
  • ^: 문자열의 시작, $: 문자열의 끝
  • .: 줄바꿈을 제외한 임의의 한 글자
  • (...): 패턴을 그룹으로 묶거나 일부를 추출
  • |: 또는
  • 역슬래시(\): 뒤에 오는 특수 문자의 정규식 기능을 해제한다. 예: \.은 임의의 글자가 아니라 마침표 자체를 의미
  • |와 시작·끝 조건을 함께 사용할 때는 그룹으로 묶어 적용 범위를 명확히 한다. 예: ^(A|B)는 A 또는 B로 시작하는 패턴이다.

상세 노트

패턴으로 문자열 다루기

위치 기반 추출 함수는 문자열마다 길이나 위치가 다를 때 표현이 복잡해질 수 있다. 정규식은 공통 패턴을 기준으로 처리하므로 이메일 주소에서 아이디를 추출하는 것처럼 구조가 유사한 문자열을 간결하게 다룰 수 있다.
이메일 아이디를 추출할 때는 이메일 주소 전체를 패턴으로 찾고, 아이디 부분을 그룹으로 지정해 해당 그룹만 반환할 수 있다. 그룹 번호는 괄호로 만든 그룹의 순서에 따라 지정한다.

SQL 정규식 함수

  • REGEXP_SUBSTR: 정규식에 일치하는 문자열을 추출한다. 기본적으로 첫 번째 일치 결과를 반환하며, 검색 시작 위치와 일치 횟수, 추출할 그룹을 지정할 수 있다.
  • REGEXP_REPLACE: 일치하는 문자열을 치환한다. 치환 문자열을 생략하면 해당 패턴을 삭제할 수 있다. 기본적으로 모든 일치 부분을 처리하며, 횟수를 지정해 특정 일치 결과만 처리할 수도 있다.
  • REGEXP_INSTR: 정규식에 일치하는 부분의 위치를 반환한다. 검색 시작 위치와 일치 횟수를 지정할 수 있다.
  • REGEXP_LIKE: 정규식 조건의 참·거짓을 판별하며, 주로 WHERE 절에서 조건에 맞는 행을 선택할 때 사용한다.
  • REGEXP_COUNT: 정규식에 일치하는 횟수를 반환한다. 반복 표현을 사용하면 개별 문자 대신 여러 문자가 연결된 패턴의 횟수를 셀 수 있다.

해석 시 주의점

  • 반복 횟수를 지정하지 않으면 대개 패턴에 해당하는 한 단위만 일치한다. 여러 문자를 연속으로 처리하려면 +, *, {n,m} 등을 사용해야 한다.
  • 대괄호는 한 글자 단위의 선택을 정의한다. 예를 들어 [AB]는 “AB”라는 문자열이 아니라 A 또는 B 한 글자다.
  • [A-Za-z0-9]처럼 대괄호 안에 문자 범위를 함께 넣으면, 지정된 범위의 문자 중 한 글자를 의미한다.
  • ^의 의미는 위치에 따라 달라진다. 대괄호 밖에서는 문자열 시작을, 대괄호 안에서는 제외를 뜻한다.
  • .은 임의의 한 글자이므로 마침표를 문자 그대로 찾으려면 \.처럼 이스케이프해야 한다.
  • REGEXP_SUBSTR는 기본적으로 첫 번째 일치 결과만 반환하는 반면, REGEXP_REPLACE는 기본적으로 모든 일치 부분을 처리한다.
공개 노트 모두 보기