카테고리:

문자열 함수(정규식)

REGEXP_SUBSTR_ALL

문자열 내에서 :doc:`정규식</sql-reference/functions-regexp>`과 일치하는 모든 하위 문자열을 포함하는 :ref:`ARRAY<label-data_type_array>`를 반환합니다.

별칭:

REGEXP_EXTRACT_ALL

구문

REGEXP_SUBSTR_ALL( <subject> ,
                   <pattern>
                     [ , <position>
                       [ , <occurrence>
                         [ , <regex_parameters>
                           [ , <group_num> ]
                         ]
                       ]
                     ]
)

인자

필수:

subject

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

pattern

일치할 패턴입니다.

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

선택 사항:

position

함수가 일치 항목 검색을 시작하는 문자열 시작 부분의 문자 수입니다. 값은 양의 정수여야 합니다.

기본값: 1 (일치 항목 검색은 왼쪽의 첫 번째 문자에서 시작됨)

occurrence

일치 항목을 반환하기 시작할 첫 번째 패턴 항목을 지정합니다.

함수는 첫 occurrence - 1 개의 일치 항목을 건너뜁니다. 예를 들어 5개의 일치 항목이 있고 occurrence 인자에 대해 3 을 지정할 경우 이 함수는 처음 두 일치 항목은 무시하고 세 번째, 네 번째, 다섯 번째 일치 항목을 반환합니다.

기본값: 1

regex_parameters

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

매개 변수

설명

c

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

i

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

m

여러 줄 모드

e

하위 일치 항목 추출

s

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

기본값: c

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

참고

기본적으로 REGEXP_SUBSTR_ALL은 주제에서 일치하는 전체 부분을 반환합니다. 그러나 e 매개 변수가 지정되면 REGEXP_SUBSTR_ALL은 패턴의 첫 번째 그룹과 일치하는 주제 부분을 반환합니다. e 가 지정되었지만 group_num 도 지정되지 않은 경우, group_num 의 기본값은 1(첫 번째 그룹)입니다. 패턴에 하위 식이 없으면 REGEXP_SUBSTR_ALL은 e 가 설정되지 않은 것처럼 작동합니다. e 를 사용하는 예는 이 항목의 예 를 참조하십시오.

group_num

추출할 그룹을 지정합니다. 그룹은 정규식에서 괄호를 사용하여 지정됩니다.

group_num 가 지정되면 Snowflake는 추출을 허용합니다. 'e' 옵션도 지정하지 않은 경우에도 마찬가지입니다. 'e' 는 내포되어 있습니다.

Snowflake는 최대 1024개의 그룹을 지원합니다.

group_num 를 사용하는 예는 이 항목의 예 를 참조하십시오.

반환

함수는 ARRAY 형식의 값을 반환합니다. 배열은 일치하는 각 부분 문자열의 요소를 포함합니다.

일치하는 항목이 없을 경우 이 함수는 빈 배열을 반환합니다.

다음의 경우 함수는 NULL을 반환합니다.

  • NULL인 인지가 있는 경우.

  • group_num 을 지정하는데 패턴이 해당 번호로 그룹화를 지정하지 않습니다. 예를 들어 패턴이 하나의 그룹(예: a(b)c)만 지정하고 사용자가 2 를 group_num 으로 사용할 경우, 이 함수는 NULL을 반환합니다.

사용법 노트

정규식 사용에 대한 추가 정보는 문자열 함수(정규식) 섹션을 참조하십시오.

데이터 정렬 세부 정보

Arguments with collation specifications currently aren’t supported.

예

다음 예의 패턴은 소문자 “a” 다음에 숫자가 오는 패턴과 일치합니다. 이 예에서는 모든 일치 항목을 포함한 ARRAY를 반환합니다.

SELECT REGEXP_SUBSTR_ALL('a1_a2a3_a4A5a6', 'a[[:digit:]]') AS matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a1", |
|   "a2", |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+

다음 예에서는 문자열의 두 번째 문자(2)에서 일치 항목 찾기를 시작합니다.

SELECT REGEXP_SUBSTR_ALL('a1_a2a3_a4A5a6', 'a[[:digit:]]', 2) AS matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a2", |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+

다음 예에서는 문자열에서 세 번째 패턴 발생 항목(3)에서 일치 항목을 반환하기 시작합니다.

SELECT REGEXP_SUBSTR_ALL('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 3) AS matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+

다음 예에서는 대/소문자를 구분하지 않는 일치 항목 찾기(i)를 수행합니다.

SELECT REGEXP_SUBSTR_ALL('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 1, 'i') AS matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a1", |
|   "a2", |
|   "a3", |
|   "a4", |
|   "A5", |
|   "a6"  |
| ]       |
+---------+

다음 예에서는 대/소문자를 구분하지 않는 일치 항목 찾기를 수행하고 첫 번째 그룹(ie)과 일치하는 문자열 부분을 반환합니다.

SELECT REGEXP_SUBSTR_ALL('a1_a2a3_a4A5a6', '(a)([[:digit:]])', 1, 1, 'ie') AS matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a",  |
|   "a",  |
|   "a",  |
|   "a",  |
|   "A",  |
|   "a"   |
| ]       |
+---------+

다음 예에서는 일치하는 항목을 찾을 수 없을 때 이 함수가 빈 배열을 반환함을 보여줍니다.

SELECT REGEXP_SUBSTR_ALL('a1_a2a3_a4A5a6', 'b') AS matches;
+---------+
| MATCHES |
|---------|
| []      |
+---------+

이 예는 첫 번째 단어가 A 인, 두 단어로 된 패턴의 첫 번째, 두 번째, 세 번째 일치 항목에 있는 문자열에서 각각 두 번째 단어를 검색하는 방법을 보여줍니다.

먼저 테이블을 만들고 데이터를 삽입합니다.

CREATE OR REPLACE TABLE test_regexp_substr_all (string1 VARCHAR);;
INSERT INTO test_regexp_substr_all (string1) VALUES ('A MAN A PLAN A CANAL');

쿼리를 실행합니다.

SELECT REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w+)', 1, 1, 'e', 1) AS result1,
       REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w+)', 1, 2, 'e', 1) AS result2,
       REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w+)', 1, 3, 'e', 1) AS result3
  FROM test_regexp_substr_all;
+-----------+-----------+-----------+
| RESULT1   | RESULT2   | RESULT3   |
|-----------+-----------+-----------|
| [         | [         | [         |
|   "MAN",  |   "PLAN", |   "CANAL" |
|   "PLAN", |   "CANAL" | ]         |
|   "CANAL" | ]         |           |
| ]         |           |           |
+-----------+-----------+-----------+

이 예는 문자열에서 패턴의 각 발생 내에서 첫 번째, 두 번째, 세 번째 그룹을 검색하는 방법을 보여줍니다. 이 경우, 반환된 값은 각 그룹에서 일치하는 각 단어에 포함된 각각의 개별 문자입니다.

SELECT REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w)(\\w)(\\w)', 1, 1, 'e', 1) AS result1,
       REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w)(\\w)(\\w)', 1, 1, 'e', 2) AS result2,
       REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w)(\\w)(\\w)', 1, 1, 'e', 3) AS result3
  FROM test_regexp_substr_all;
+---------+---------+---------+
| RESULT1 | RESULT2 | RESULT3 |
|---------+---------+---------|
| [       | [       | [       |
|   "M",  |   "A",  |   "N",  |
|   "P",  |   "L",  |   "A",  |
|   "C"   |   "A"   |   "N"   |
| ]       | ]       | ]       |
+---------+---------+---------+