[정리노트] 데이터분석 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;

예제) 정규식 표현식을 사용한 패턴에 일치하는 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개로 취급함
'스터디 > SQL' 카테고리의 다른 글
2024년 54회차 SQLD 자격증 시험 후기, 공부법 (14) | 2024.09.03 |
---|---|
[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - PIVOT 과 UNPIVOT (15) | 2024.08.31 |
[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - 계층형 질의 (29) | 2024.08.28 |
[정리노트] 데이터분석 IT자격증 SQLD 2024년 개정판 - TOP N QUERY (29) | 2024.08.27 |
[기출문제] 2과목(SQL기본.1) - 2024 개정판, 해설 포함 (88) | 2024.08.23 |