Background Image
조회 수 12669 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
CUBRID에서는 정규표현식을 사용하기 위홰서 RLIKE 와 REGEXP를 지원한다.

매뉴얼 링크는 다음과 같다. 
http://www.cubrid.org/manual/ko/9.2.0/sql/function/condition_fn.html#regexp-rlike

REGEXPRLIKE는 동일하며, 정규 표현식을 이용한 패턴을 매칭하기 위해 사용된다. 정규 표현식은 복잡한 검색 패턴을 표현하는 강력한 방법이다. CUBRID는 Henry Spencer가 구현한 정규 표현식을 사용하며, 이는 POSIX 1003.2 표준을 따른다. 이 페이지는 정규 표현식에 대한 세부 사항을 설명하지는 않으므로, 정규 표현식에 대한 자세한 사항은 Henry Spencer의 regex(7)을 참고한다.

다음은 정규 표현식 패턴의 일부이다.

  • "."은 문자 하나와 매칭된다(줄바꿈 문자(new line)와 캐리지 리턴 문자(carriage return)를 포함).
  • "[...]"은 대괄호 안의 문자 중 하나와 매칭된다. 예를 들어, "[abc]"는 "a", "b" 또는 "c"와 매칭된다. 문자의 범위를 나타내려면 대시(-)를 사용한다. "[a-z]"은 임의의 알파벳 문자 하나와 매칭되고, "[0-9]"는 임의의 숫자 하나와 매칭된다.
  • "*"은 앞의 문자 또는 문자열이 0번 이상 연속으로 나열된 문자열과 매칭된다. 예를 들어, "xabc*"는 "xab", "xabc", "xabcc", "xabcxabc" 등과 매칭되며, "[0-9][0-9]*"는 어떤 숫자와도 매칭된다. 그리고 ".*"은 모든 문자열과 매칭된다.
  • "n", "t", "r", ""의 특수 문자를 매칭하기 위해서는 시스템 파라미터 no_backslash_escapes (기본값: yes)를 no로 설정하여 백슬래시()를 이스케이프 문자로 허용해야 한다. no_backslash_escapes에 대한 자세한 설명은 특수 문자 이스케이프를 참고한다.

REGEXP와 LIKE의 차이는 다음과 같다.

  • LIKE 절은 입력값 전체가 패턴과 매칭되어야 성공한다.
  • REGEXP는 입력값의 일부가 패턴과 매칭되면 성공한다. REGEXP에서 전체 값에 대한 패턴 매칭을 하려면, 패턴의 시작에는 "^"을, 끝에는 "$"을 사용해야 한다.
  • LIKE 절의 패턴은 대소문자를 구분하지만 REGEXP에서 정규 표현식의 패턴은 대소문자를 구분하지 않는다. 대소문자를 구분하려면 REGEXP BINARY 구문을 사용해야 한다.
  • REGEXPREGEXP BINARY는 피연산자의 콜레이션을 고려하지 않고 ASCII 인코딩으로 동작한다.
 
하지반 실제 사용하기 위한 예제가 충분하지 않고 실제 구현하다보면 안되는 부분이 약간 있어서 
주의할 점에 대한 설명과 자주 사용하는 예를 들어서 내용을 전개 하고자 한다.

1) REGEXP와 LIKE의 차이 중 가장 큰점은 REGEXP에서 정규 표현식의 패턴은 대소문자를 구분이 되지 않는다.
    따라서 
REGEXP 사용 시 REGEXP BINARY 로 사용하는 것이 정확한 결과를 볼 수 있다.
2) cubrid.conf 의 no_backslash_escapes 기본 값이 yes이므로 백슬래시()를 이스케이프 문자가 디폴트로 사용되지 않는다.
3) 정규 표현식 사용 시 w 영숫자(영문 및 숫자)를 대표하는 알리아스는 
   테스트 결과 작동 하지 않으므로 [0-9a-zA-Z]로 표현 해야 할 것이다.
4) 정규 표현식 사용 시 d 숫자를 대표하는 알리아스도
   테스트 결과 작동 하지 않으므로 [0-9]로 표현 해야 할 것이다.
5) 정규 표현식 사용 시 s 공백를 대표하는 알리아스도
   테스트 결과 작동 하지 않으므로 [ ]로 표현 해야 할 것이다.
6) 정규식 결과는 일치 시 1 불일치 시 0 NULL 일 때 NULL 이므로 NULL 까지 확인 하기 위해서는 
   NVL()함수를 이용하자.
7) 정확한 검사를 위해서 ()(소괄호)를 이용해서 명확하게 구분하자.
   ex) SELECT ( '123' REGEXP BINARY '^[0-9]+' ) -- 예제는 숫자로 시작하는 문자열을 확인
8) 단일 조건으로 사용 할 때 INDEX 활용이 되지 않음에 유의 하자.

다음은 자주 사용되는 예제이다.

1) 이메일 체크
   : 영숫자로 시작하며 2번 문자부터는 영숫자 및 특수문자 `.`, `-`, `_` 를 포함 할 수 있고 
     @ 뒤에는 영숫자로 시작하며 두번째 문자부터는 특수문자 `-`, `_`를 포함 할 수 있고
     . 뒤에 영숫자로 시작하며 두번째 문자부터는 특수문자 `-`, `_`를 포함 할 수 있으며 1또는 2회 반복 가능.
SELECT 
email,
NVL(email REGEXP BINARY '(^[0-9a-zA-Z])([0-9a-zA-Z]|[0-9a-zA-Z._-])+([0-9a-zA-Z]@[0-9a-zA-Z][0-9a-zA-Z_-]+(.[0-9a-zA-Z]+[0-9a-zA-Z_-]){1,2})$', 0) AS email_chk
FROM 테이블

2) 유효 날짜 체크
   : 1900년 부터 시작하여 20xx년 까지부터는 숫자
    월은 0으로 시작하며 두번째 문자는 0-9까지 및 1로 시작하며 0부터 2까지
    일은 0 또는 2로 시작하여 0-9까지 및 3으로 시작하여 0-1까지

SELECT 
birthday,
NVL(birthday REGEXP '^[1-2][9|0][0-9]{2}(0[1-9])|(1[0-2])(([0-2][0-9])|(3[0-1]))', 0) AS birthday_chk
FROM 테이블

3) 일반 전화 번호 체크
  : 070을 포함한 지역번호로 시작하며 중간번호가 3또는 4자리
    마지막 자리는 4자리의 숫자

SELECT 
phone,
NVL(phone REGEXP '^(070|02|031|032|033|041|042|043|051|052|053|054|055|061|062|063|064)[0-9]{3,4}[0-9]{4}$', 0) AS phone_chk
FROM 테이블

4) 휴대전화 번호 체크
   : 앞의 4자리가 010x로 시작시 뒤는 모두 4자리
     앞의 4자리가 과거 3G번호 대 일 때에는 뒤의 자리는 7 또는 8자리

SELECT 
mobile,
NVL(mobile REGEXP '(^010[0-9]{4})[0-9]{4}|((^01[1|6|7|8|9][0-9]{3,4})[0-9]{4})$', 0) AS mobile_chk
FROM 테이블

5) IP 번호 체크
   : 0~255.0~255.0~255.0~255

SELECT 
ip,
NVL(ip REGEXP '^([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])).([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])).([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])).([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$', 0) AS ip_chk
FROM 테이블

위의 예제와 같이 사용 할 수 있으나 날짜 체크의 경우 윤년일 경우에만 존재하는 2월 29일이 나올 수도 있으며 
예제의 정규식은 완벽하지 않으므로 사용 시 충분한 테스트를 하여 확인 해 보아야 하겠다. 



List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
166 기타 트랜잭션과 LOCK 초급과정 정만영 2010.07.01 20760
165 기타 큐브리드10.1 에서 윤초 지원 옵션 사용하기 최광일 2017.09.13 1386
164 기타 콘솔에서 마이그레이션 하기. file 권호일 2015.06.19 13426
163 기타 조인 방법(Join Method) 설명 file 웁쓰 2009.12.31 27986
162 기타 제로보드 XE 사용하기 file admin 2008.11.21 33067
161 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81343
160 기타 자동증가 속성 사용 방법 및 주의 사항 남재우 2010.02.26 35649
159 Windows 윈도우즈 환경에서 배치화일을 이용하여 백업 또는 데이터베이스 정리 수행하기 남재우 2010.03.03 27479
158 기타 오래 걸리는 질의 및 동일 시간에 수행 중인 질의 추출하기 손승일 2009.05.26 20057
157 기타 오라클 개발자를 위한 CUBRID 개발 안내 1 admin 2009.04.01 49817
156 기타 예제로 배우는 CUBRID 스터디 문학청년 2009.12.29 18545
155 기타 에러 메시지(error) 설명 및 조치 가이드 file CUBRID_DEV 2009.07.11 24412
154 기타 알고 보면 쉬운 cubrid lockdb 유틸리티 file 김승훈 2015.12.08 12001
153 기타 시스템 카다로그 2 admin 2008.11.21 22333
152 기타 스칼라 서브쿼리 사용 가이드 웁쓰 2009.12.31 28264
151 기타 서비스 오픈을 위한 CUBRID 구성 가이드 손승일 2009.11.28 23204
150 Linux 복제 따라하기 admin 2008.11.21 29094
149 기타 보안 설정 admin 2008.11.21 22838
148 기타 멀티미디어 데이터 관리를 위한 CUBRID GLO Method 활용 janus 2009.12.11 16191
147 Linux 리소스를 제한(limits.conf) 하여 DB서버를 관리하자 1 주현 2015.12.31 26530
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales