정규 표현식 개요
오라클 데이터베이스는 복잡한 문자열 패턴 매칭 및 조작을 위해 SQL 및 PL/SQL 환경에서 정규 표현식을 지원합니다. 이는 데이터 검증, 데이터 추출, 문자열 대체 등 다양한 작업에 유용하게 활용됩니다. 이 가이드에서는 오라클에서 제공하는 정규 표현식 기능과 실무적인 활용법을 자세히 살펴보겠습니다.
오라클 SQL에서 정규 표현식 지원
오라클은 SQL 내에서 정규 표현식을 사용하기 위한 다양한 함수를 제공합니다. 주요 함수는 다음과 같습니다:
REGEXP_LIKE
: 특정 패턴과 일치하는지 여부를 확인합니다.REGEXP_INSTR
: 패턴이 나타나는 위치를 찾습니다.REGEXP_SUBSTR
: 패턴과 일치하는 하위 문자열을 추출합니다.REGEXP_REPLACE
: 패턴과 일치하는 부분을 다른 문자열로 대체합니다.
정규 표현식 연산자
오라클 정규 표현식은 다양한 연산자(메타 문자)를 사용하여 패턴을 정의합니다. 몇 가지 주요 연산자는 다음과 같습니다:
.
: 임의의 단일 문자.*
: 앞선 패턴의 0회 이상 반복.+
: 앞선 패턴의 1회 이상 반복.?
: 앞선 패턴의 0회 또는 1회 반복.[ ]
: 문자 집합 정의. 예:[abc]
는 a, b, c 중 하나.[^ ]
: 문자 집합 제외. 예:[^abc]
는 a, b, c를 제외한 문자.^
: 문자열의 시작.$
: 문자열의 끝.|
: OR 연산.( )
: 하위 표현식 그룹화.
기본 사용 예시
REGEXP_LIKE를 사용한 패턴 일치 확인
다음은 employees
테이블에서 이름이 “Smith”로 시작하는 직원을 찾는 예제입니다.
실행 결과:
“` — (이름이 Smith로 시작하는 직원 목록) “`REGEXP_INSTR를 사용한 패턴 위치 찾기
다음은 이메일 주소에서 ‘@’ 문자의 위치를 찾는 예제입니다.
“`sql SELECT email, REGEXP_INSTR(email, ‘@’) AS at_position FROM customers; “`실행 결과:
“` — 이메일 주소와 ‘@’ 문자 위치 목록 “`REGEXP_SUBSTR를 사용한 하위 문자열 추출
다음은 전화번호에서 숫자 부분만 추출하는 예제입니다.
“`sql SELECT phone_number, REGEXP_SUBSTR(phone_number, ‘[0-9]+’) AS numeric_part FROM contacts; “`실행 결과:
“` — 전화번호와 숫자 부분 목록 “`REGEXP_REPLACE를 사용한 문자열 대체
다음은 문자열에서 여러 공백을 단일 공백으로 대체하는 예제입니다.
“`sql SELECT address, REGEXP_REPLACE(address, ‘ +’, ‘ ‘) AS cleaned_address FROM locations; “`실행 결과:
“` — 주소와 정리된 주소 목록 “`실무 활용 사례
이메일 주소 유효성 검사
다음은 customers
테이블에서 유효한 이메일 주소 형식을 가진 레코드만 선택하는 예제입니다. 복잡한 패턴을 사용하여 더욱 정확하게 검증할 수 있습니다.
실행 결과:
“` — 유효한 이메일 주소를 가진 고객 목록 “`URL에서 도메인 추출
다음은 웹사이트 URL에서 도메인 이름을 추출하는 예제입니다.
“`sql SELECT website, REGEXP_SUBSTR(website, ‘https?://([A-Za-z0-9.-]+)’) AS domain FROM company_profiles; “`실행 결과:
“` — 웹사이트와 도메인 목록 “`데이터 마스킹
개인 정보 보호를 위해 신용카드 번호의 일부를 ‘*’ 문자로 대체하는 예제입니다.
“`sql SELECT credit_card, REGEXP_REPLACE(credit_card, ‘([0-9]{4})[0-9]+([0-9]{4})’, ‘\1****\2’) AS masked_card FROM payment_info; “`실행 결과:
“` — 신용카드 번호와 마스킹된 신용카드 번호 목록 “`고급 활용 기법
역참조 (Backreference) 활용
역참조는 괄호로 묶인 하위 표현식에 일치하는 텍스트를 나중에 다시 참조하는 기능입니다. 신용카드 번호 마스킹 예제에서 \1
과 \2
가 역참조입니다.
다양한 패턴 옵션
REGEXP_LIKE
함수는 다양한 옵션을 지원합니다. 예를 들어, 대소문자를 구분하지 않고 패턴을 찾으려면 ‘i’ 옵션을 사용합니다.
주의사항 및 성능 고려사항
정규 표현식은 강력하지만, 복잡한 패턴은 성능 저하를 유발할 수 있습니다. 인덱스를 활용할 수 없는 경우도 많으므로 대용량 테이블에서는 신중하게 사용해야 합니다. 가능하면 간단한 패턴을 사용하고, 필요한 경우에만 복잡한 패턴을 사용하는 것이 좋습니다.