카테고리:

문자열 함수(정규식)

REGEXP_LIKE

문자열이 지정된 패턴과 일치하는지 확인하기 위해 비교를 수행합니다. 두 입력 모두 텍스트 식이어야 합니다.

REGEXP_LIKE는 LIKE 함수와 유사하지만, SQL LIKE 패턴 구문 대신 `POSIX 확장 정규식<http://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended>`_을 사용합니다. REGEXP_LIKE는 LIKE보다 더 복잡한 일치 조건을 지원합니다.

검색 최적화 서비스를 사용하여 이 함수를 호출하는 쿼리의 성능을 향상할 수 있습니다. 자세한 내용은 검색 최적화 서비스 섹션을 참조하십시오.

별칭:

:doc:`RLIKE <rlike>`(첫 번째 구문)

구문

REGEXP_LIKE( <subject> , <pattern> [ , <parameters> ] )
Copy

인자

필수:

subject

일치 항목을 검색할 문자열입니다.

pattern

일치할 패턴입니다.

패턴 지정에 관한 지침은 문자열 함수(정규식) 섹션을 참조하십시오.

선택 사항:

parameters

일치 항목을 검색하는 데 사용되는 매개 변수를 지정하는 하나 이상의 문자로 된 문자열입니다. 지원되는 값:

매개 변수

설명

c

대/소문자를 구분하는 일치

i

대/소문자를 구분하지 않는 일치

m

여러 줄 모드

e

하위 일치 항목 추출

s

한 줄 모드 POSIX 와일드카드 문자 .\n 과 일치합니다.

기본값: c

자세한 내용은 정규식에 매개 변수 지정하기 섹션을 참조하십시오.

반환

BOOLEAN 값 또는 NULL을 반환합니다.

  • 일치하는 항목이 있는 경우 TRUE를 반환합니다.

  • 일치하는 항목이 없는 경우 FALSE를 반환합니다.

  • 인자가 NULL인 경우 NULL을 반환합니다.

사용법 노트

데이터 정렬 세부 정보

Arguments with collation specifications currently aren’t supported.

다음 예제에서는 REGEXP_LIKE 함수를 사용합니다.

정규식의 추가 예는 REGEXP 섹션을 참조하세요.

문자열에 대한 기본 정규식 쿼리 실행

도시 이름이 있는 테이블을 만듭니다.

CREATE OR REPLACE TABLE cities(city VARCHAR(20));

INSERT INTO cities VALUES
  ('Sacramento'),
  ('San Francisco'),
  ('San Luis Obispo'),
  ('San Jose'),
  ('Santa Barbara'),
  ('Palo Alto'),
  (NULL);
Copy

가능한 한 많은 문자와 일치하도록 ``.*``를 와일드카드로 사용할 수 있습니다. 다음 예제는 문자열 값의 어디에서나 패턴 ``Fran``과 일치합니다.

SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*Fran.*');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
+---------------+

다음 예제에서는 대소문자를 구분하지 않는 일치를 위해 i 매개 변수를 사용합니다.

SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*fran.*', 'i');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
+---------------+

문자열 값의 시작과 일치하는 패턴을 찾으려면 와일드카드를 사용하는 쿼리 실행합니다.

SELECT * FROM cities WHERE REGEXP_LIKE(city, 'san.*', 'i');
Copy
+-----------------+
| CITY            |
|-----------------|
| San Francisco   |
| San Luis Obispo |
| San Jose        |
| Santa Barbara   |
+-----------------+

와일드카드를 사용하여 대/소문자를 구분하는 쿼리를 실행하려면 i 매개 변수를 생략합니다.

SELECT * FROM cities WHERE REGEXP_LIKE(city, 'san.*');
Copy
+------+
| CITY |
|------|
+------+

\w+ 메타 문자를 사용하여 하나의 단어와 일치시키고, \s 메타 문자를 사용하여 공백 또는 탭과 같은 하나의 공백 문자와 일치시킬 수 있습니다. 다음 쿼리는 한 단어 뒤에 공백 문자, 한 단어가 값을 포함하는 값을 검색합니다.

SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\s\\w+');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
| San Jose      |
| Santa Barbara |
| Palo Alto     |
+---------------+

``San Luis Obispo``는 첫 번째 단어와 두 번째 단어 사이에 공백이 있는 세 단어이지만 두 단어 사이에 공백이 있기 때문에 쿼리 출력에 포함되지 않습니다.

정규식에서는 대문자 메타 문자를 사용하여 소문자 메타 문자의 의미를 부정하는 경우가 많습니다. 예를 들어, \S 메타 문자를 사용하여 두 단어 사이에 공백 문자를 포함하지 않는 값을 검색하는 쿼리를 실행합니다.

SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\S\\w+');
Copy
+------------+
| CITY       |
|------------|
| Sacramento |
+------------+

특수 문자가 있는 문자열에 정규식 쿼리 실행하기

이 섹션의 예에서는 a-z, A-Z, 밑줄(“_”) 또는 10진수 이외의 문자인 특수 문자가 있는 값을 검색합니다.

메타 문자를 검색하려면 메타 문자를 이스케이프합니다. 자세한 내용은 작은따옴표로 묶인 문자열 상수에서 정규식 지정하기 섹션을 참조하세요.

테이블을 만든 다음 특수 문자가 포함된 일부 값을 삽입합니다.

CREATE OR REPLACE TABLE regex_special_characters(v VARCHAR(20));

INSERT INTO regex_special_characters VALUES
  ('Snow'),
  ('Sn.ow'),
  ('Sn@ow'),
  ('Sn$ow'),
  ('Sn\\ow');
Copy

첫 번째로 삽입된 값에는 특수 문자가 포함되지 않습니다.

데이터를 표시하려면 테이블을 쿼리합니다.

SELECT * FROM regex_special_characters;
Copy
+-------+
| V     |
|-------|
| Snow  |
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+

\W Perl 백슬래시 시퀀스를 사용하여 특수 문자를 검색할 수 있으며, 이는 “단어” 문자가 아닌 문자를 검색합니다. 예를 들어, 다음 쿼리는 테이블에서 특수 문자가 있는 값을 검색합니다.

SELECT *
  FROM regex_special_characters
  WHERE REGEXP_LIKE(v, '.*\\W.*');
Copy
+-------+
| V     |
|-------|
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+

작은따옴표로 묶인 문자열 상수에서 메타 문자를 검색<label-regex_metacharacter>`하려면 두 개의 백슬래시로 메타문자를 이스케이프해야 합니다. 예를 들어 다음 쿼리는 ``$` 메타 문자가 포함된 값을 검색합니다.

SELECT *
  FROM regex_special_characters
  WHERE REGEXP_LIKE(v, '.*\\$.*');
Copy
+-------+
| V     |
|-------|
| Sn$ow |
+-------+

백슬래시를 검색하는 경우 추가 백슬래시 이스케이프 문자가 필요합니다. 예를 들어, 다음 쿼리는 \ 또는 . 메타 문자가 포함된 값을 검색합니다.

SELECT *
  FROM regex_special_characters
  WHERE REGEXP_LIKE(v, '.*(\\.|\\\\).*');
Copy
+-------+
| V     |
|-------|
| Sn.ow |
| Sn\ow |
+-------+