Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.4.1 |  CUBRID 8.4.3 |  CUBRID 9.0.0 | 

REGEXP 조건식, RLIKE 조건식

설명

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

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

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

REGEXPLIKE의 차이는 다음과 같다.

  • LIKE 절은 입력값 전체가 패턴과 매칭되어야 성공한다.
  • REGEXP는 입력값의 일부가 패턴과 매칭되면 성공한다. REGEXP에서 전체 값에 대한 패턴 매칭을 하려면, 패턴의 시작에는 "^"을, 끝에는 "$"을 사용해야 한다.
  • LIKE 절의 패턴은 대소문자를 구분하지만 REGEXP에서 정규 표현식의 패턴은 대소문자를 구분하지 않는다. 대소문자를 구분하려면 REGEXP BINARY 구문을 사용해야 한다.

아래 구문에서 expr에 매칭되는 패턴 pat이 존재하면 1을 반환하며, 그렇지 않은 경우 0을 반환한다. exprpat 중 하나가 NULL이면 NULL을 반환한다.

NOT을 사용하는 두 번째 구문과 세 번째 구문은 같은 의미이다.

구문

expr REGEXP|RLIKE [BINARY] pat

expr NOT REGEXP|RLIKE pat

NOT (expr REGEXP|RLIKE pat)

  • expr : 칼럼 또는 입력 표현식
  • pat : 정규 표현식에 사용될 패턴. 대소문자 구분 없음
예제

-- When REGEXP is used in SELECT list, enclosing this with parentheses is required. But used in WHERE clause, no need parentheses.

-- case insensitive, except when used with BINARY.

SELECT name FROM athlete where name REGEXP '^[a-d]';

name

======================

'Dziouba Irina'

'Dzieciol Iwona'

'Dzamalutdinov Kamil'

'Crucq Maurits'

'Crosta Daniele'

'Bukovec Brigita'

'Bukic Perica'

'Abdullayev Namik'

 

-- : match a special character, when no_backslash_escapes=no

SELECT ('new line' REGEXP 'new

line');

('new

line' regexp 'new

line')

=====================================

1

 

-- ^ : match the beginning of a string

SELECT ('cubrid dbms' REGEXP '^cub');

('cubrid dbms' regexp '^cub')

===============================

1

 

-- $ : match the end of a string

SELECT ('this is cubrid dbms' REGEXP 'dbms$');

('this is cubrid dbms' regexp 'dbms$')

========================================

1

 

--.: match any character

SELECT ('cubrid dbms' REGEXP '^c.*$');

('cubrid dbms' regexp '^c.*$')

================================

1

 

-- a+ : match any sequence of one or more a characters. case insensitive.

SELECT ('Aaaapricot' REGEXP '^A+pricot');

('Aaaapricot' regexp '^A+pricot')

================================

1

 

-- a? : match either zero or one a character.

SELECT ('Apricot' REGEXP '^Aa?pricot');

('Apricot' regexp '^Aa?pricot')

==========================

1

SELECT ('Aapricot' REGEXP '^Aa?pricot');

('Aapricot' regexp '^Aa?pricot')

===========================

1

 

SELECT ('Aaapricot' REGEXP '^Aa?pricot');

('Aaapricot' regexp '^Aa?pricot')

============================

0

 

-- (cub)* : match zero or more instances of the sequence abc.

SELECT ('cubcub' REGEXP '^(cub)*$');

('cubcub' regexp '^(cub)*$')

==========================

1

 

-- [a-dX], [^a-dX] : matches any character that is (or is not, if ^ is used) either a, b, c, d or X.

SELECT ('aXbc' REGEXP '^[a-dXYZ]+');

('aXbc' regexp '^[a-dXYZ]+')

==============================

1

 

SELECT ('strike' REGEXP '^[^a-dXYZ]+$');

('strike' regexp '^[^a-dXYZ]+$')

================================

1

참고 사항

다음은 REGEXP 조건식를 구현하기 위해 사용한 라이브러리인 RegEx-Specer의 라이선스이다.

Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved.

This software is not subject to any license of the American Telephone

and Telegraph Company or of the Regents of the University of California.

 

Permission is granted to anyone to use this software for any purpose on

any computer system, and to alter it and redistribute it, subject

to the following restrictions:

 

1. The author is not responsible for the consequences of use of this

software, no matter how awful, even if they arise from flaws in it.

 

2. The origin of this software must not be misrepresented, either by

explicit claim or by omission. Since few users ever read sources,

credits must appear in the documentation.

 

3. Altered versions must be plainly marked as such, and must not be

misrepresented as being the original software. Since few users

ever read sources, credits must appear in the documentation.

 

4. This notice may not be removed or altered.