카테고리:

문자열 함수(정규식)

REGEXP

지정된 패턴과 주제가 일치하면 true를 반환합니다. 두 입력 모두 텍스트 식이어야 합니다.

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

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

별칭

RLIKE (두 번째 구문)

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

구문

<subject> REGEXP <pattern>
Copy

인자

필수:

subject

일치할 주제입니다.

pattern

일치할 패턴입니다.

반환

반환된 값의 데이터 타입은 BOOLEAN 입니다.

사용법 노트

  • 이 함수는 암시적으로 패턴을 양쪽 끝에 고정합니다(즉, '' 는 자동으로 '^$' 가 되고 'ABC' 는 자동으로 '^ABC$' 가 됨). ABC로 시작하는 문자열을 찾으려면 패턴은 'ABC.*' 가 됩니다.

  • 백슬래시 문자(\)는 이스케이프 문자입니다. 자세한 내용은 작은따옴표로 묶인 문자열 상수에서 정규식 지정하기 섹션을 참조하십시오.

  • 더 많은 사용법 노트는 정규식 함수에 대한 일반적인 사용법 노트 를 참조하십시오.

데이터 정렬 세부 정보

Arguments with collation specifications are currently not supported.

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

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

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

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

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

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

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

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

이 예는 《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   |
+-------------------------------------+---------+
Copy

이 예는 백슬래시가 뒤에 오는 공백을 검색하는 방법을 보여줍니다. 검색할 단일 백슬래시는 아래에 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   |
+-------------------------------------+---------+
Copy

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