Background Image
조회 수 12688 추천 수 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일이 나올 수도 있으며 
예제의 정규식은 완벽하지 않으므로 사용 시 충분한 테스트를 하여 확인 해 보아야 하겠다. 



  1. 멀티미디어 데이터 관리를 위한 CUBRID GLO Method 활용

    Date2009.12.11 Category기타 Byjanus Views16191
    Read More
  2. QTADO를 이용하여 CUBRID접속하기

    Date2009.12.10 CategoryODBC/OLEDB Bycubebridge Views21489
    Read More
  3. CUBRID 개발 가이드

    Date2009.12.09 Category기타 Byjanus Views18368
    Read More
  4. 서비스 오픈을 위한 CUBRID 구성 가이드

    Date2009.11.28 Category기타 By손승일 Views23204
    Read More
  5. CUBRID R2.0 ISV(Independent Software Vendor)설치방법

    Date2009.11.20 CategoryInstall Bycubebridge Views27920
    Read More
  6. CUBRID 2008 R2.0의 CM변경사항

    Date2009.11.20 Category기타 Byjanus Views17045
    Read More
  7. CUBRID Java Stored Procedure와 DB Server Memory 관계

    Date2009.10.31 CategoryJava By손승일 Views40190
    Read More
  8. QuantumDB Eclipse Plugin을 사용하여 CUBRID연동하기

    Date2009.10.06 CategoryJava Bycubebridge Views28920
    Read More
  9. windows 환경에서 여러버젼의 CUBRID 설치하여 사용하기

    Date2009.09.16 CategoryWindows By남재우 Views26187
    Read More
  10. CUBRID HA introduction

    Date2009.08.28 Category기타 Byjanus Views20862
    Read More
  11. CUBRID2008 R2.0 실행계획 분석하기

    Date2009.08.27 Category기타 Bycubebridge Views21917
    Read More
  12. CUBRID 2008 + XE 설치 가이드 [R2.0]

    Date2009.08.27 Category기타 ByPrototype Views16573
    Read More
  13. CUBRID 설치 및 매니저 구동하기(CUBRID 2008 R2.0)

    Date2009.08.18 CategoryInstall ByCUBRID_DEV Views30039
    Read More
  14. DB의 스키마와 데이터를 파일로 내려받기

    Date2009.08.17 Category기타 Byseongjoon Views20008
    Read More
  15. CUBRID 주요 명령 요약 정리

    Date2009.08.17 Category기타 By정만영 Views17187
    Read More
  16. CUBRID Manager login 안내

    Date2009.08.17 Category기타 Byseongjoon Views16200
    Read More
  17. CUBRID2008_보안설정[R2.0]

    Date2009.08.17 Category기타 Byseongjoon Views16272
    Read More
  18. CUBRID2008R1.x to 2.0 마이그레이션 가이드 (32bit 기준)

    Date2009.08.17 CategoryLinux By정만영 Views27200
    Read More
  19. CUBRID Tutorial (Unix/Linux)

    Date2009.08.17 CategoryLinux By정만영 Views27884
    Read More
  20. CUBRID2008R2.0 Windows BACKUP 자동화 설정하기

    Date2009.08.17 CategoryWindows By정만영 Views27942
    Read More
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