본문 바로가기
스터디/SQL

[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - 정규표현식

by 견습생L 2024. 9. 2.

[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - 정규표현식


정규 표현식

  •   문자열의 공통된 규칙을 보다 일반화 하여 표현하는 방법
  •   정규 표현식 사용 가능한 문자함수 제공 (regexp_replace, regexp_substrt, regext_instr, ...)
  •   ex) 숫자를 포함한느, 숫자로 시작하는 4자리, 두번째 자리가 A인 5글자

정규 표현식 종류

  •   정규 표현식의 용어들정규 표현식에서 사용되는 기호를 Meta문자라고  표현한다
  •   표현식에서 내부적으로 특정 의미를 가지는 문자를 말한다
₩d 숫자 [ab] a또는 b의 한글자
₩D Non digit 의미 하며 숫자가 아닌것 [^ab] a와 b를 제외한 모든 문자
₩s 공백 [0-9] 모든 숫자
₩S 공백 아닌것 [A-Z] 모든 영어 대문자
₩w 단어 [a-z] 모든 영어 소문자
₩W 단어가 아닌것 [A-z] 모든 영어 문자
₩t Tab i+ i가 1회 이상 반복
₩n Nuw line (엔터) i* i가 0회 이상 반복
^ 시작되는 글자 i? 0회에서 1회 반복
$  마지막 글자 i{n} i가 n회 반복
뒤에 기호 의미 제거 i{n1,n2} i가 n1에서 n2회 반복
| 또는 i{n,} i가 n회 이상 반복
엔터를 제외한
모든 한글자
() 그룹지정

 

ex) 전화번호의 일반화

글자 1차 일반화 결과 2차 일반화 결과
tel)02-999-4456 tel)[0-9-]+ tel\)?[0-9-]+
tel02-999-4456 tel [0-9-]+

→ 전화번호는 숫자와 -로 구성 -> [0-9-]+ 로 표현가능 ([]안에 들어가는 패턴이 한자리의 문자열을 구설할 수 있는 값들)
→ 두 전화번호가 tel 값은 동시에 있지만, )가 있는 경우와 없는 경우를 모두 표현 -> ?사용(?는 값이 없거나 1개)


REGEXP_REPLACE

  •   정규식 표현을 사용한 문자열 치환 가능
  •   문법
(대상, 찾을 문자열, [바꿀문자열],[검색위치],[발견횟수],[옵션])

1. 특징

  •   바꿀문자열 생략 시 문자열 삭제
  •   검색위치 생략 시 1
  •   발견횟수 생략 시 0 (모든)

 

2. 옵션

  •   c: 대소를 구분하여 검색
  •   i: 대소를 구분하지 않고 검색
  •   m: 패턴을 다중라인으로 선언 가능

ex) ID에서 숫자 삭제

SELECT ID,
	   REGEXT_REPLACE(ID, '\d, '')
       REGEXT_REPLACE(ID, \[[:digit:]]','')
  FROM PROFESSOR;

→ 빈문자열을 전달하여 숫자를 모두 삭제 처리

ex) ID에서 특수기호 삭제

SELECT ID,
	   REGEXT_REPLACE(ID, '\W', '') AS RESULT1
       REGEXT_REPLACE(ID, \W|_','') AS RESULT2
       REGEXT_REPLACE(ID, '[[:punct:]]','') AS RESULT3
  FROM PROFESSOR;

→ \w는 문자와 숫자, _를 포함, \W는 \w의 반대 집합이므로 문자와 숫자와 _이 아닌 특수기호와 공백을 의미


REGEXP_SUBSTR

  •   정규식 표현식을 사용한 문자열 추출
  •   옵션은 REGEXP_SUBSTR과 동일
  •   문법
REGEXP_SUBSTR(대상, 패턴, [검색위치],[발견횟수],[옵션],[추출그룹])

1. 특징

  •   검색위치 생략 시 1
  •   발견횟수 생략 시 1
  •   추출그룹은 서브패턴을 추출 시 그 중 추출할 서브패턴 번호

 

ex) 전화번호를 분리하여 지역번호 추

SELECT TEL, 
       REGEXP_SUBSTR(TEL,  -- 원본
                     '(\d+)\)(\d+)-(\d+)', --패턴(서브패턴과 함께 표현)
                     1,                    --시작위치
                     1,                    --발견횟수
                     null,                 --옵션
                     1) AS 지역번호        --추출할 서브패턴(그룹)번호
  FROM STUDENT;

→ 전화번호 구성 : 숫자여러개 + ) + 숫자여러개 + - + 숫자여러개
차례대로 \d+, \), \d+, -, \d+ 로 표현 가능, 그 중 첫 번째 그룹을 추출

ex) 이메일 아이디 추출(서브패턴 활용)

SELECT EMAIL, 
       REGEXP_SUBSTR(EMAIL, '(.+)@,1,1,NULL, 1) AS EMAIL_ID,
       REGEXP_SUBSTR(EMAIL, '((\w|\W)+)@[a-z.]+', 1, 1, NULL, 1) AS EMAIL_ID2
  FROM PROFESSOR;

→ EMAIL 주소는 EMAIL_ID@ENGINE 으로 구성
→ EMAIL_ID: 몇 특수기호를 제외한 영문, 숫자 기호로 구성
→ ENGIN: 영문과 . 으로 구성


REGEXP_INSTR

  •   주어진 문자열에서 특정패턴의 시작 위치를 반환
  •   옵션은 REGEXP_SUBSTR과 동일
  •   문법
REGEXP_INSTR(원본, 찾을 문자열, [시작위치], [발견횟수],[옵션])

1. 특징

  •   시작위치 생략 시 처음부터 확인 (기본값:1)
  •   발견횟수 생략 시 처음 발견된 문자열 위치 리턴

 

ex) ID 값에서 두 번째 발견된 숫자의 위치

SELECT ID,
       REGEXP_INSTER(ID, '\d', 1, 2)
  FROM PROFESSOR;
 
→ \d는 숫자를 나타내는 표현이고, 뒤에 횟수를 지정하지 않으면 한 자리수의 숫자를 의미함
 

예제) 정규식 표현식을 사용한 패턴에 일치하는 n번째 문자열 위치

SELECT REGEXP_INSTR('500 ORACLE PARKWAY, REDWOOD SHORES, CA','[^ ]+', 1, 2) AS "REGEXP_INSTR"
  FROM DUAL;

→ 다음과 같으 문자열에서 공백이 아닌 문자열의 반복들 중 처음부터 스캔하여 두번째 발견된 것의 위치 리턴


REGEXP_LIKE

  •   주어진 문자열에서 특정 패턴을 갖는 경우 반환(WHERE절 에서만 사용 가능)
  •   옵션 REGEXP_REPLACE와 동일
  •   문법
REGEXP_LIKE(원본, 찾을문자열, [옵션])

ex) ID값이 숫자로 끝나는 교수 정보 출력

SELECT *
  FROM PROFESSOR
 WHERE REGEXP_LIKE(ID, '\d$\);


REGEXP_COUNT

  • 주어진 문자열에서 특정패턴의 횟수를 반환
  • 옵션 REGEXP_REPLACE와 동일
  • 문법
REGEXP_COUNT(원본, 찾을문자열, 시작위치, [옵션])

 

ex) ID값에서의 숫자의 수

SELECT ID,
       REGEXP_COUN(ID, '\d') AS RESULT1
       REGEXP_COUN(ID, '\d+') AS RESULT2
  FROM PROFESSOR;

→ \d는 한 자리수의 숫자를 의미하며 \d|는 연속적인 숫자를 의미, 따라서 COUNT시 연속적인 숫자를 1개로 취급함

반응형