카테고리:

문자열 함수(정규식)

[ NOT ] REGEXP

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

REGEXP는 [ NOT ] LIKE 함수와 유사하지만, SQL LIKE 패턴 구문 대신 POSIX 확장 정규식을 사용합니다. 이 함수는 LIKE보다 더 복잡한 일치 조건을 지원합니다.

팁

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

별칭:

[ NOT ] RLIKE (두 번째 구문)

문자열 함수(정규식) 항목도 참조하십시오.

구문

<subject> [ NOT ] REGEXP <pattern>

인자

필수:

subject

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

pattern

일치할 패턴입니다.

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

반환

BOOLEAN 또는 NULL을 반환합니다.

  • REGEXP가 지정된 경우 일치하는 항목이 있으면 값은 TRUE입니다. 그렇지 않으면 FALSE를 반환합니다.

  • NOT REGEXP가 지정된 경우 일치하는 항목이 없으면 값은 TRUE입니다. 그렇지 않으면 FALSE를 반환합니다.

  • REGEXP 또는 NOT REGEXP가 지정된 경우 인자가 NULL이면 NULL을 반환합니다.

사용법 노트

데이터 정렬 세부 정보

Arguments with collation specifications currently aren’t supported.

예

아래 예는 간단한 와일드카드 식과 함께 REGEXP를 사용하는 방법을 보여줍니다.

테이블을 만들고 데이터를 로딩합니다.

CREATE OR REPLACE TABLE strings (v VARCHAR(50));
INSERT INTO strings (v) VALUES
  ('San Francisco'),
  ('San Jose'),
  ('Santa Clara'),
  ('Sacramento');

와일드카드를 사용하여 패턴을 검색합니다.

SELECT v
  FROM strings
  WHERE v REGEXP 'San* [fF].*'
  ORDER BY v;
+---------------+
| V             |
|---------------|
| San Francisco |
+---------------+

백슬래시 문자 \ 는 정규식의 이스케이프 문자이며 특수 문자 또는 문자 그룹을 지정합니다. 예를 들어 \s 는 공백에 대한 정규식입니다.

리터럴 문자열을 구문 분석하는 Snowflake 문자열 파서는 백슬래시 또한 이스케이프 문자로 처리합니다. 예를 들어, 백슬래시는 탭 문자를 지정하는 문자 시퀀스의 일부로 사용됩니다. 따라서 단일 백슬래시를 포함하는 문자열을 생성하려면 2 개의 백슬래시를 지정해야 합니다. 예를 들어, 아래 입력 문의 문자열을 출력의 해당 문자열과 비교합니다.

INSERT INTO strings (v) VALUES
  ('Contains embedded single \\backslash');
SELECT *
  FROM strings
  ORDER BY v;
+-------------------------------------+
| V                                   |
|-------------------------------------|
| Contains embedded single \backslash |
| Sacramento                          |
| San Francisco                       |
| San Jose                            |
| Santa Clara                         |
+-------------------------------------+

이 예는 San 으로 시작하는 문자열을 검색하는 방법을 보여줍니다. 여기서 San 은 완전한 단어입니다(예: Santa 의 일부가 아님). \b 는 단어 경계의 이스케이프 시퀀스입니다.

SELECT v, v REGEXP 'San\\b.*' AS matches
  FROM strings
  ORDER BY v;
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | False   |
| Sacramento                          | False   |
| San Francisco                       | True    |
| San Jose                            | True    |
| Santa Clara                         | False   |
+-------------------------------------+---------+

이 예는 백슬래시가 뒤에 오는 공백을 검색하는 방법을 보여줍니다. 검색할 단일 백슬래시는 아래에 4 개의 백슬래시로 표시됩니다. REGEXP가 리터럴 백슬래시를 찾으려면 해당 백슬래시를 이스케이프해야 하므로 2개의 백슬래시가 필요합니다. 문자열 파서는 이러한 각 백슬래시를 이스케이프해야 하므로, 식이 검색하는 1개의 백슬래시를 나타내는 4개의 백슬래시가 식에 포함됩니다.

SELECT v, v REGEXP '.*\\s\\\\.*' AS matches
  FROM strings
  ORDER BY v;
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+

다음 예는 문자열이 리터럴이란 점 및 백슬래시가 이스케이프 시퀀스로 해석되어서는 안 된다는 점을 문자열 파서에 알리기 위해 $$ 를 문자열 구분 기호로 사용한다는 것을 제외하고는 앞의 예와 동일합니다. (백슬래시는 여전히 REGEXP에 의해 이스케이프 시퀀스로 해석됩니다.)

SELECT v, v REGEXP $$.*\s\\.*$$ AS MATCHES
  FROM strings
  ORDER BY v;
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+