적용 대상:
Databricks SQL
Databricks Runtime
str에서 regexp 식과 일치하고 regex 그룹 인덱스에 해당하는 첫 번째 문자열을 추출합니다.
구문
regexp_extract(str, regexp [, idx] )
인수
-
strSTRING: 일치시킬 식입니다. -
regexpSTRING: 일치하는 패턴이 있는 식입니다. -
idx: 0보다 크거나 같은 선택적 정수 식입니다(기본값 1).
반품
STRING.
, 또는 이면 str결과는 .입니다regexp.idxNULLNULL
regexp 일부str와 일치하지 않으면 결과는 빈 문자열입니다.
전체 패턴이 일치하지만 지정된 idx 그룹이 일치 항목에 참여하지 않는 경우 결과는 빈 문자열입니다.
regexp 문자열은 Java 정규식이어야 합니다. 지원되는 구문은 Java 정규식 패턴을 참조하세요.
리터럴을 사용하는 경우 (raw-literal접두사)r 이스케이프 문자 사전 처리를 방지합니다.
regexp에는 여러 그룹이 포함될 수 있습니다. 캡처 그룹은 패턴의 일부를 괄호로 묶어 정의합니다 (...).
idx는 추출할 regex 그룹을 나타냅니다.
0의 idx는 전체 정규식을 일치시키는 것을 의미합니다.
기본값 idx 은 1입니다. 즉, 생략하면 첫 번째 캡처 그룹이 반환 idx 됩니다.
정의된 idx캡처 그룹 수보다 크면 regexp Databricks에서 오류가 발생합니다.
첫 번째 일치 regexpstr 항목만 고려됩니다. 모든 일치 항목을 추출하려면 regexp_extract_all 사용합니다.
일반적인 오류 조건
예제
특정 캡처 그룹 추출
> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);
100
> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 2);
200
idx 0을 사용하여 전체 일치 항목 반환
> SELECT regexp_extract('Order: 100-200', '(\\d+)-(\\d+)', 0);
100-200
기본 idx는 1입니다.
idx 생략하면 첫 번째 캡처 그룹이 반환됩니다.
> SELECT regexp_extract('abc123def', '([a-z]+)(\\d+)');
abc
빈 문자열을 반환하는 일치 항목 없음
> SELECT regexp_extract('hello world', '(\\d+)', 1);
NULL 입력은 NULL을 반환합니다.
> SELECT regexp_extract(NULL, '(\\d+)', 1);
NULL
원시 문자열 리터럴을 사용하여 이중 이스케이프 방지
일반 SQL 문자열에서 백슬라이시는 두 배가 되어야 합니다(\\d 의미 \d). 원시 문자열 리터럴의 r 접두사를 사용하여 패턴을 더 자연스럽게 작성합니다.
> SELECT regexp_extract('abc123', r'(\d+)', 1);
123
URL에서 도메인 추출
> SELECT regexp_extract('https://www.databricks.com/product', r'https?://([^/]+)', 1);
www.databricks.com
날짜 문자열에서 구성 요소 추출
> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 0);
2024-03-15
> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 2);
03
일치 항목에 참여하지 않는 선택적 캡처 그룹
그룹이 선택 사항이며 일치하지 않으면 해당 그룹에 대해 빈 문자열이 반환됩니다.
> SELECT regexp_extract('ac', r'(a)(b)?(c)', 2);
잘못된 정규식 패턴
> SELECT regexp_extract('abc', '[invalid', 0);
Error: INVALID_PARAMETER_VALUE.PATTERN