Background Image
조회 수 12792 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
77 기타 [10.2 path] - 생성된 view구문을 'show create view' 수행 시 정상적으로 출력되지 않던 이슈 patch 큐브리드_김주현 2020.11.09 904
76 기타 ERwin을 이용한 CUBRID 포워드 엔지니어링 file 민순 2020.07.14 2348
75 기타 ERwin을 이용한 CUBRID 리버스 엔지니어링 file 민순 2020.07.13 3496
74 기타 큐브리드10.1 에서 윤초 지원 옵션 사용하기 최광일 2017.09.13 1433
73 기타 따라하면 쉬운 compactdb 사용법 file 허서진 2017.07.01 2547
72 기타 PyCharm을 이용한 CUBRID, Django 연동 가이드 file 진우진 2016.04.11 8161
71 기타 CSQL 인터프리터 사용방법 정만영 2016.03.03 16698
» 기타 데이터 확인에 정규표현식을 사용 해 보자. 성진 2016.03.01 12792
69 기타 CUBRID Migration Toolkit을 이용한 단계별 마이그레이션 진행 방법 file 진우진 2015.12.15 9568
68 기타 알고 보면 쉬운 cubrid lockdb 유틸리티 file 김승훈 2015.12.08 12120
67 기타 CUBRID Migration방법(by unloaddb & loaddb) 주현 2015.07.01 21932
66 기타 콘솔에서 마이그레이션 하기. file 권호일 2015.06.19 13435
65 기타 CUBRID isolation level & Dirty Read 정만영 2015.05.29 11322
64 기타 HA 환경 구성 시 데이터 복제 지연이 발생하는 경우 ECHO(7) port를 확인하자. 손승일 2012.11.29 26465
63 기타 select .. for update 처리를 위한 Stored Procudure 등록 및 사용법 남재우 2011.12.10 24873
62 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81485
61 기타 [주의사항] CUBRID에서의 BLOB/CLOB 사용시 백업 및 복구에 대한 주의 점 admin 2011.07.14 52824
60 기타 CUBRID 매니저 R3.1에서 웹호스팅 서버의 CUBRID R2.1 접속하는 방법 (큐브리드 매니저에서 다른 버전의 큐브리드 서버 접속 방법) file admin 2011.07.14 31511
59 기타 동시 접속자에 따른 파라미터 설정 admin 2011.07.14 25699
58 기타 CUBRID 2008 R4.0 GA 버전의 주요 기능만 요약한 PPT 문서 file admin 2011.07.14 15462
Board Pagination Prev 1 2 3 4 Next
/ 4

Contact Cubrid

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