본문 바로가기
Database

오라클 REGEXP로 정규 표현식 처리하기: 강력한 데이터 처리 도구

by 굿센스굿 2024. 12. 5.
반응형

 

오라클 데이터베이스에서 제공하는 REGEXP(정규 표현식 관련 함수)는 복잡한 문자열 패턴 매칭, 추출, 변환 작업을 효율적으로 수행할 수 있는 강력한 도구입니다. 이 글에서는 REGEXP 관련 주요 함수와 실무에서 활용할 수 있는 예제를 통해 REGEXP의 핵심 기능과 활용법을 알아보겠습니다.


1. 오라클에서 제공하는 REGEXP 함수

주요 함수 목록

함수 이름 설명

REGEXP_LIKE 특정 패턴이 문자열과 일치하는지 확인 (Boolean 반환)
REGEXP_INSTR 패턴과 일치하는 부분의 시작 위치 또는 끝 위치 반환
REGEXP_SUBSTR 문자열에서 패턴에 매칭된 부분 추출
REGEXP_REPLACE 문자열의 패턴을 다른 값으로 변환
REGEXP_COUNT 문자열에서 패턴이 매칭된 횟수 반환

2. REGEXP_LIKE: 문자열 패턴 일치 확인

기본 사용법

SELECT first_name
FROM employees
WHERE REGEXP_LIKE(first_name, '^A'); -- A로 시작하는 이름

예제

이메일 주소 유효성 검사

SELECT email
FROM users
WHERE REGEXP_LIKE(email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$');
  • 이메일 패턴: 알파벳, 숫자, 특수문자 조합 + "@" + 도메인

3. REGEXP_INSTR: 특정 패턴 위치 확인

기본 사용법

SELECT REGEXP_INSTR('Oracle Database', 'a', 1, 2) AS position
FROM dual;
  • 'a'의 두 번째 발생 위치를 반환 (결과: 12)

예제

문자열에서 특정 패턴의 위치 찾기

SELECT REGEXP_INSTR('john.doe@example.com', '@', 1, 1) AS at_position
FROM dual;
  • 결과: 10 (@의 위치)

4. REGEXP_SUBSTR: 문자열 추출

기본 사용법

SELECT REGEXP_SUBSTR('Oracle Database 19c', '[A-Za-z]+', 1, 2) AS second_word
FROM dual;
  • 패턴 [A-Za-z]+에서 두 번째 매칭된 단어를 반환 (결과: Database)

예제

전화번호 형식 추출

SELECT REGEXP_SUBSTR('Call me at (123) 456-7890.', '\(\d{3}\) \d{3}-\d{4}') AS phone_number
FROM dual;
  • 결과: (123) 456-7890

5. REGEXP_REPLACE: 문자열 변환

기본 사용법

SELECT REGEXP_REPLACE('123-456-7890', '-', '') AS clean_number
FROM dual;
  • 결과: 1234567890

예제

이름 뒤 공백 제거

SELECT REGEXP_REPLACE('John    ', '\s+$', '') AS trimmed_name
FROM dual;
  • 결과: John

6. REGEXP_COUNT: 패턴 매칭 횟수 반환

기본 사용법

SELECT REGEXP_COUNT('banana', 'a') AS count_a
FROM dual;
  • 결과: 3 (a가 3번 등장)

예제

문장에서 단어 개수 세기

SELECT REGEXP_COUNT('This is a test sentence.', '\b\w+\b') AS word_count
FROM dual;
  • 결과: 5 (단어가 5개)

7. REGEXP 함수 실무 활용 예제

예제 1: 로그 데이터에서 에러 코드 추출

SELECT REGEXP_SUBSTR(log_message, 'ERROR \d+', 1, 1) AS error_code
FROM system_logs
WHERE REGEXP_LIKE(log_message, 'ERROR');
  • 로그 메시지에서 ERROR와 뒤따르는 숫자 추출

예제 2: CSV 문자열 분리

SELECT REGEXP_SUBSTR('apple,banana,cherry', '[^,]+', 1, LEVEL) AS fruit
FROM dual
CONNECT BY REGEXP_SUBSTR('apple,banana,cherry', '[^,]+', 1, LEVEL) IS NOT NULL;
  • 결과:
    • apple
    • banana
    • cherry

예제 3: 특정 단어 강조 표시

SELECT REGEXP_REPLACE('Oracle is great for databases.', 'Oracle', '**Oracle**') AS highlighted_text
FROM dual;
  • 결과: **Oracle** is great for databases.

8. 정규 표현식 패턴의 주요 요소

패턴 설명

^ 문자열의 시작
$ 문자열의 끝
. 임의의 문자 한 개
* 0개 이상 반복
+ 1개 이상 반복
? 0개 또는 1개
{n} 정확히 n번 반복
{n,} 최소 n번 반복
{n,m} n번 이상, m번 이하 반복
[abc] a, b, 또는 c 중 하나
[^abc] a, b, 또는 c를 제외한 문자
\d 숫자 (0-9)
\w 단어 문자 (알파벳, 숫자, _)
\s 공백 문자

9. REGEXP 사용 시 주의사항

  1. 성능 고려:
    • REGEXP 함수는 문자열 매칭 과정에서 비교적 높은 비용이 발생할 수 있습니다.
    • 대량 데이터 처리 시 인덱스를 활용하거나 WHERE 절에서 REGEXP 사용을 최소화하는 것이 좋습니다.
  2. 정확한 패턴 설계:
    • 잘못된 패턴은 의도하지 않은 결과를 초래할 수 있으므로 테스트를 충분히 수행해야 합니다.
  3. 오라클 버전 확인:
    • REGEXP 함수는 Oracle 10g 이상에서 지원됩니다. 일부 고급 기능은 최신 버전에서만 사용 가능합니다.

10. 결론

오라클의 REGEXP 함수는 데이터베이스 내 문자열 처리 및 분석 작업을 간소화하는 데 유용합니다. 복잡한 패턴을 단순화하고 실무에서 필요한 다양한 데이터 정제 및 검증 작업을 손쉽게 수행할 수 있습니다. 위의 예제와 패턴을 활용해 실무에서 REGEXP의 강력함을 직접 경험해 보세요!

반응형