우선 정규식을 실습할 테이블이다.

num, name, email에 데이터 들어가 있다.

 

-- name이 한 또는 백으로 시작하는 레코드만 출력해라.

우리가 정규식을 배우기 전에 했던 방식

SELECT * FROM reg WHERE SUBSTR(name, 1, 1) IN ('한', '백');
SELECT * FROM reg WHERE INSTR(name, '한') = 1 OR INSTR(name, '백') = 1;

정규식을 이용해 출력하기

SELECT * FROM reg WHERE REGEXP_LIKE(name, '^[한백]');

-- name : 강산으로 끝나는 레코드

SELECT * FROM reg WHERE REGEXP_LIKE(name, '강산$');

-- com으로 끝나는 email

SELECT * FROM reg WHERE REGEXP_LIKE(email, 'com$');
    -- 소문자만 가능
SELECT * FROM reg WHERE REGEXP_LIKE(email, 'com$', 'i');
    -- 대소문자 구분 안함

-- email : kim포함

SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim');
SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim*');

-- email : kim3?3 가운데 한글자가 뭐든지 상관없음

SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim3?3');

-- email : kim 다음에 0~3 사이의 문자가 2번 반복

SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim[0-3]{2}');

-- email : kim 다음에 2~3 사이의 문자가 3~4번 반복

SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim[2-3]{3,4}');

 

-- email : kim다음에 1이 아닌 레코드

SELECT* FROM reg WHERE REGEXP_LIKE(email, 'kim[^1]');

-- email : k로 시작하지 않는 사람들

SELECT* FROM reg WHERE REGEXP_LIKE(email, '^[^k]');

-- name : 이름이 한글인 사람만

SELECT* FROM reg WHERE REGEXP_LIKE(name, '^[가-힣]{2,}$');

-- email : 숫자가 있는 이메일을 출력

SELECT* FROM reg WHERE REGEXP_LIKE(email, '[0-9]');
SELECT* FROM reg WHERE REGEXP_LIKE(email, '[[:digit:]]');

-- email : 영문자가 존재하는 이메일 출력

SELECT* FROM reg WHERE REGEXP_LIKE(email, '[a-z|A-Z]');

REGEXP_LIKE(컬럼, '정규식'); 을 통해 컬럼에서 원하는 데이터만 출력해보았다.

 

REGEXP_REPLACE 는 문자열을 지정한 패턴으로 치환한다.

SELECT 'hong gil dong' FROM dual;
SELECT REGEXP_REPLACE('hong gil dong', '(.*) (.*) (.*)', '\2 \3 \1') FROM dual;
-- . 은 한글자 * 0자 이상
-- (.*) 모든 글자

-- email 에 숫자 없애기

SELECT email, REGEXP_REPLACE(email, '[[:digit:]]', '')FROM reg;

-- 특수 문자 제거

SELECT REGEXP_REPLACE('우리&*나라 12 대!@한', '[[:digit:]|[:punct:]]', '') FROM dual;

-- 숫자와 특수문자 제거

SELECT REGEXP_REPLACE('우리&*나라 12 대!@한', '[[:digit:]|[:punct:]]', '') FROM dual;

-- 지정된 위치부터 문자를 *로 치환

SELECT REGEXP_REPLACE ('00090931111111', '[0-9]', '*', 9) FROM dual;
    -- 7번째 위치부터 [0-9] 문자를 *로 치환

-- 영문자(한글도 포함)가 아닌 문자의 위치

SELECT name, REGEXP_INSTR(name, '[^[:alpha:]]') FROM reg;

-- 이름에 소문자가 아닌 문자가 존재하는 위치

SELECT name, REGEXP_INSTR(name, '[^[:lower:]]') FROM reg;

-- 이름에 문자가 아닌 것이 있는 위치

SELECT name, REGEXP_INSTR(name, '[^[:alpha:]]') FROM reg;

:alpha: 는 한글도 검색한다.

-- email에서 @ 뒤부분을 제외한 ID부분 출력

SELECT email, REGEXP_SUBSTR(email, '[^@]+') FROM reg;

-- email : 0~9 범위의 수가 몇개 존재하는지

SELECT email, REGEXP_COUNT(email, '[0-9]') FROM reg;

 

 

+ Recent posts