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 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81343
165 Linux 리눅스에서 top 명령어를 통한 CPU 점유율 확인 및 측정하기 file 정훈 2017.06.02 79611
164 Java iBATIS framework with CUBRID file 웁쓰 2009.05.19 54543
163 Java CUBRID와 Oracle의 Clob 타입 사용 방법 비교. seongjoon 2012.06.30 54541
162 Linux HP-UX에서 CUBRID 사용을 위한 kernel 설정값 조정 1 admin 2009.04.01 54130
161 Java Spring framework 사용 예제 admin 2009.04.01 53114
160 기타 [주의사항] CUBRID에서의 BLOB/CLOB 사용시 백업 및 복구에 대한 주의 점 admin 2011.07.14 52502
159 기타 connect by 구현 방법 admin 2009.04.01 52370
158 PHP windows 상에서 PHP 설치하기 file admin 2008.11.21 51804
157 기타 오라클 개발자를 위한 CUBRID 개발 안내 1 admin 2009.04.01 49817
156 Java DBCP 사용법 1 admin 2008.11.21 48362
155 Windows CUBRID 2008 사용법 admin 2008.11.21 47933
154 Java jsp용 jdbc 샘플입니다. file 시난 2009.05.25 47606
153 기타 CUBRID 활용 - 질의 튜닝 사례 중심 file cubrid 2010.12.02 45960
152 Java CUBRID에서 log4sql을 사용하자 정병주 2009.06.12 44299
151 Install Windows 에서 CUBRID 설치하기 file 남재우 2008.11.22 43640
150 PHP LINUX에서 PHP 사용하기 file admin 2008.11.21 42495
149 Install CUBRID Manager 사용시 로그인에 대하여 1 file admin 2009.04.01 42035
148 PHP Apache, PHP 설치 방법 file 이용미 2013.05.16 41246
147 기타 CUBRID 개발 로드맵 admin 2008.12.27 40321
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