[MySQL] REGEXP and NOT REGEXP 패턴매칭
페이지 정보
작성자 서방님 댓글 0건 조회 159회 작성일 15-01-20 10:37본문
확장된 규칙 수식이라고 불리우는 REGEXP 패턴매칭에 대해 간단히 알아보겠습니다. 우선 다음과 같은 특징이 있습니다.
실제 사용되는 예제를 보며 쉽게 이해해 봅시다.
1. mysql> SELECT * FROM pet WHERE name REGEXP '^b';
(= mysql> SELECT * FROM pet WHERE name LIKE 'b%'; )
pet 테이블 name 컬럼에 b로 시작하는 모든 이름(name 컬럼)을 찾습니다.
2. mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';
바이너리 키워드로 인해 소문자 b로 시작하는 이름을 찾습니다.
3. mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
(= mysql> SELECT * FROM pet WHERE name LIKE '%fy'; )
fy로 끝나는 이름을 찾습니다.
4. mysql> SELECT * FROM pet WHERE name REGEXP 'w';
(= mysql> SELECT * FROM pet WHERE name LIKE '%w%'; )
5. mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
(= mysql> SELECT * FROM pet WHERE name REGEXP '^{5}$'; )
(= mysql> SELECT * FROM pet WHERE name LIKE '_____'; )
5 글자로 된 이름을 찾는다.
* {n}('repeat-n-times') 연산자를 사용했다.
다음 문제를 고민해 보면 REGEXP를 사용해야 하는 이유를 생각해보세요.
Q) 첫 음절은 숫자로 시작하고 다음 음절은 문자로 시작되는 값을 검색하시오.
1. '.' 은 모든 단일 문자를 매치 시킨다. (= LIKE 에서 '_'와 같음)
2. 문자 클래스 [..]은 대괄호 안에 있는 모든 문자를 매치 시킨다.
ex> [abc]는 'a', 'b', 'c'를 각각 매치 시킨다.
3. 문자 클래스에서 범위 지정은 대쉬('-')를 사용한다.
ex> [0-9] 모든 숫자, [a-z] 모든 영문자 매치
4. 테스트되는 값이 있는 모든 곳에서 매칭을 한다.
(LIKE는 전체 값에서만 패턴 매치를 진행한다.)
5. 처음이라는 토큰 '^' 와 끝이라는 토큰 '$' 가 있다.
2. 문자 클래스 [..]은 대괄호 안에 있는 모든 문자를 매치 시킨다.
ex> [abc]는 'a', 'b', 'c'를 각각 매치 시킨다.
3. 문자 클래스에서 범위 지정은 대쉬('-')를 사용한다.
ex> [0-9] 모든 숫자, [a-z] 모든 영문자 매치
4. 테스트되는 값이 있는 모든 곳에서 매칭을 한다.
(LIKE는 전체 값에서만 패턴 매치를 진행한다.)
5. 처음이라는 토큰 '^' 와 끝이라는 토큰 '$' 가 있다.
실제 사용되는 예제를 보며 쉽게 이해해 봅시다.
1. mysql> SELECT * FROM pet WHERE name REGEXP '^b';
(= mysql> SELECT * FROM pet WHERE name LIKE 'b%'; )
pet 테이블 name 컬럼에 b로 시작하는 모든 이름(name 컬럼)을 찾습니다.
2. mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';
바이너리 키워드로 인해 소문자 b로 시작하는 이름을 찾습니다.
3. mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
(= mysql> SELECT * FROM pet WHERE name LIKE '%fy'; )
fy로 끝나는 이름을 찾습니다.
4. mysql> SELECT * FROM pet WHERE name REGEXP 'w';
(= mysql> SELECT * FROM pet WHERE name LIKE '%w%'; )
5. mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
(= mysql> SELECT * FROM pet WHERE name REGEXP '^{5}$'; )
(= mysql> SELECT * FROM pet WHERE name LIKE '_____'; )
5 글자로 된 이름을 찾는다.
* {n}('repeat-n-times') 연산자를 사용했다.
다음 문제를 고민해 보면 REGEXP를 사용해야 하는 이유를 생각해보세요.
Q) 첫 음절은 숫자로 시작하고 다음 음절은 문자로 시작되는 값을 검색하시오.
댓글목록
등록된 댓글이 없습니다.