REGEXP_SUBSTR 함수
문자열에서 정규 표현식 패턴을 검색하여 문자를 반환합니다. REGEXP_SUBSTR은 SUBSTRING 함수 함수와 비슷하지만 문자열에서 정규 표현식 패턴을 검색할 수 있습니다. 함수에서 정규 표현식이 문자열의 어떤 문자와도 일치하지 않는 경우 빈 문자열이 반환됩니다. 정규 표현식에 관한 자세한 내용은 POSIX 연산자 단원 및 Wikipedia의 정규 표현식
구문
REGEXP_SUBSTR( source_string, pattern [, position [, occurrence [, parameters ] ] ] )
인수
- source_string
-
검색할 문자열 표현식입니다.
- 패턴
-
정규 표현식 패턴을 나타내는 UTF-8 문자열 리터럴입니다. 자세한 내용은 POSIX 연산자 단원을 참조하십시오.
- position
-
source_string 내에서 검색을 시작할 위치를 나타내는 양의 정수입니다. 이 위치는 바이트가 아닌 문자 수를 기준으로 하기 때문에 멀티바이트 문자도 단일 문자로 계산됩니다. 기본 값은 1입니다. position이 1보다 작으면 검색이 source_string의 첫 문자부터 시작됩니다. position이 source_string의 문자 수보다 크면 결과는 빈 문자열("")이 됩니다.
- 발생
-
사용할 패턴 발생을 나타내는 양의 정수입니다. REGEXP_SUBSTR은 첫 번째 발생에서 1을 뺀 개수의 일치하는 항목을 건너뜁니다. 기본 값은 1입니다. 발생이 1보다 작거나 source_string에 있는 문자 수보다 클 경우 검색이 무시되고 결과가 NULL이 됩니다.
- 파라미터
-
함수가 패턴과 일치하는 방법을 나타내는 하나 이상의 문자열 리터럴입니다. 가능한 값은 다음과 같습니다.
-
c - 대/소문자를 구분하여 일치시킵니다. 기본값은 대/소문자 구분 일치를 사용하는 것입니다.
-
i - 대/소문자를 구분하지 않고 일치시킵니다.
-
e - 하위 표현식을 사용하여 하위 문자열을 추출합니다.
패턴에 하위 표현식이 포함되어 있을 경우 REGEXP_SUBSTR은 패턴의 첫 번째 하위 표현식을 사용하여 하위 문자열과 일치시킵니다. 하위 표현식은 괄호로 묶인 패턴 내 표현식입니다. 예를 들어
'This is a (\\w+)'
패턴은 첫 번째 표현식과 뒤에 단어가 오는'This is a '
문자열을 일치시킵니다.e
매개 변수가 있는 REGEXP_SUBSTR은 패턴을 반환하는 대신 하위 표현식 내의 문자열만 반환합니다.REGEXP_SUBSTR은 첫 번째 하위 표현식만 고려하며 추가 하위 표현식은 무시됩니다. 패턴에 하위 표현식이 없으면 REGEXP_SUBSTR이 'e' 파라미터를 무시합니다.
-
p – PCRE(Perl Compatible Regular Expression) 방언으로 패턴을 해석합니다. PCRE에 관한 자세한 내용은 Wikipedia의 펄 호환 정규 표현식
을 참조하세요.
-
반환 타입
VARCHAR
예시
다음은 @ 문자와 도메인 확장자 사이의 이메일 주소 구간을 반환하는 예입니다. 쿼리된 users
데이터는 Amazon Redshift 샘플 데이터에서 가져온 것입니다. 자세한 내용은 샘플 데이터베이스 단원을 참조하십시오.
SELECT email, regexp_substr(email,'@[^.]*') FROM users ORDER BY userid LIMIT 4;
email | regexp_substr -----------------------------------------------+-------------------------- Suspendisse.tristique@nonnisiAenean.edu | @nonnisiAenean amet.faucibus.ut@condimentumegetvolutpat.ca | @condimentumegetvolutpat sed@lacusUtnec.ca | @lacusUtnec Cum@accumsan.com | @accumsan
다음 예에서는 대/소문자를 구분하지 않는 일치를 사용하여 문자열 FOX
의 첫 번째 발생에 해당하는 입력 부분을 반환합니다.
SELECT regexp_substr('the fox', 'FOX', 1, 1, 'i');
regexp_substr --------------- fox
다음 예에서는 대/소문자를 구분하지 않는 일치를 사용하여 문자열 FOX
의 두 번째 발생에 해당하는 입력 부분을 반환합니다. 두 번째 항목이 없기 때문에 결과값은 NULL
(비어 있음)입니다.
SELECT regexp_substr('the fox', 'FOX', 1, 2, 'i');
regexp_substr ---------------
다음 예제에서는 소문자로 시작하는 입력의 첫 번째 부분을 반환합니다. 이는 c
파라미터가 없는 동일한 SELECT 문과 기능적으로 동일합니다.
SELECT regexp_substr('THE SECRET CODE IS THE LOWERCASE PART OF 1931abc0EZ.', '[a-z]+', 1, 1, 'c');
regexp_substr --------------- abc
다음 예에서는 PCRE 방언으로 작성된 패턴을 사용하여 하나 이상의 숫자와 하나의 소문자가 포함된 단어를 찾습니다. PCRE에서 특정 미리 보기 의미가 있는 ?=
연산자가 사용됩니다. 이 예에서는 두 번째 단어에 해당하는 입력 부분을 반환합니다.
SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'p');
regexp_substr --------------- a1234
다음 예에서는 PCRE 방언으로 작성된 패턴을 사용하여 하나 이상의 숫자와 하나의 소문자가 포함된 단어를 찾습니다. PCRE에서 특정 미리 보기 의미가 있는 ?=
연산자가 사용됩니다. 이 예는 두 번째 단어에 해당하는 입력 부분을 반환하지만 대/소문자를 구분하지 않는 일치를 사용한다는 점에서 이전 예와 다릅니다.
SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'ip');
regexp_substr --------------- A1234
다음 예에서는 하위 표현식을 사용하여 'this is a (\\w+)'
패턴과 일치하는 두 번째 문자열을 찾습니다. 괄호를 친 하위 표현식을 반환합니다.
SELECT regexp_substr( 'This is a cat, this is a dog. This is a mouse.', 'this is a (\\w+)', 1, 2, 'ie');
regexp_substr --------------- dog