POSIX 연산자
POSIX 정규 표현식은 일치 패턴을 지정하는 일련의 문자입니다. 문자열이 정규 표현식에 설명된 정규 집합의 멤버인 경우 해당 문자열은 정규 표현식과 일치합니다.
POSIX 정규 표현식은 LIKE 및 SIMILAR TO 연산자보다 더욱 강력한 패턴 일치 수단을 제공합니다. POSIX 정규 표현식은 패턴은 전체 문자열과 일치하는 경우에만 true를 반환하는 SIMILAR TO 연산자와 달리 문자열 구간과 일치시킬 수 있습니다.
참고
POSIX 연산자를 사용하는 정규 표현식 일치는 계산에 따른 리소스 비용이 높습니다. 따라서 특히 다수의 행을 처리할 때는 최대한 LIKE를 사용하는 것이 좋습니다. 예를 들어 다음 두 쿼리는 기능면에서 동일하지만 LIKE를 사용하는 쿼리의 실행 속도가 정규 표현식을 사용하는 쿼리보다 몇 배 더 빠릅니다.
select count(*) from event where eventname ~ '.*(Ring|Die).*'; select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
구문
expression [ ! ] ~ pattern
인수
- expression
-
열 이름 같이 유효한 UTF-8 문자 표현식입니다.
- !
-
부정 연산자입니다. 정규 표현식과 일치하지 않습니다.
- ~
-
대/소문자를 구분하여 expression의 하위 문자열과 일치시킵니다.
참고
~~
는 LIKE의 동의어입니다. - 패턴
-
정규 표현식 패턴을 나타내는 문자열 리터럴입니다.
pattern에 와일드카드 문자가 포함되어 있지 않으면 패턴이 문자열 자체만 의미합니다.
‘. * | ?
‘ 등 메타 문자가 포함된 문자열을 찾으려면 백슬래시 2개('
\\
')를 사용하여 문자를 이스케이프 처리하십시오. SIMILAR TO
나 LIKE
와 달리 POSIX 정규 표현식 구문은 사용자 정의 이스케이프 문자를 지원하지 않습니다.
문자 표현식 중 하나는 CHAR 또는 VARCHAR 데이터 형식이 될 수 있습니다. 데이터 형식이 서로 다른 경우에는 Amazon Redshift가 pattern을 expression의 데이터 형식으로 변환합니다.
문자 표현식 모두 CHAR 또는 VARCHAR 데이터 형식이 될 수 있습니다. 표현식의 데이터 형식이 다르면 Amazon Redshift가 expression의 데이터 형식으로 변환합니다.
POSIX 패턴 일치에서 지원되는 메타 문자는 다음과 같습니다.
POSIX | 설명 |
---|---|
. | 모든 문자를 일치시킵니다. |
* |
0개 이상의 발생 패턴을 일치시킵니다. |
+ |
1개 이상의 발생 패턴을 일치시킵니다. |
? |
0개 또는 1개의 발생 패턴을 일치시킵니다. |
| |
대체할 일치 패턴을 지정합니다. 예를 들어 는 E 또는 H 를 의미합니다. |
^ |
라인 시작 문자를 일치시킵니다. |
$ |
라인 끝 문자를 일치시킵니다. |
$ |
문자열 끝을 일치시킵니다. |
[ ] | 대괄호는 일치하는, 즉 목록의 표현식 1개와 일치해야 하는 목록을 지정합니다. 일치하지 않는, 즉 목록의 표현식을 제외한 모든 문자와 일치하는 목록 앞에는(^ )이 입력됩니다. |
( ) |
그룹 항목을 괄호로 묶어 단일 논리 항목으로 처리합니다. |
{m} |
이전 항목을 정확히 m번 반복합니다. |
{m,} |
이전 항목을 m번 이상 반복합니다. |
{m,n} |
이전 항목을 m번 이상, n번 미만 반복합니다. |
[: :] |
POSIX 문자 클래스 안에 있는 모든 문자를 일치시킵니다. [:alnum:] , [:alpha:] , [:lower:] , [:upper:] 문자 클래스에서는 Amazon Redshift가 ASCII 문자만 지원합니다. |
다음은 Amazon Redshift에서 지원되는 POSIX 문자 클래스입니다.
문자 클래스 | 설명 |
---|---|
[[:alnum:]] |
모든 ASCII 영숫자 문자 |
[[:alpha:]] |
모든 ASCII 알파벳 문자 |
[[:blank:]] |
모든 공백 문자 |
[[:cntrl:]] |
모든 제어 문자(비인쇄) |
[[:digit:]] |
모든 숫자 |
[[:lower:]] |
모든 ASCII 알파벳 소문자 |
[[:punct:]] |
모든 구두점 문자 |
[[:space:]] |
모든 공백 문자(비인쇄) |
[[:upper:]] |
모든 ASCII 알파벳 대문자 |
[[:xdigit:]] |
모든 유효 16진수 문자 |
Amazon Redshift는 정규 표현식에서 다음과 같이 Perl의 영향을 받는 연산자를 지원합니다. 이러한 연산자는 백슬래시 2개(‘\\
’)를 사용하여 이스케이프 처리합니다.
연산자 | 설명 | 등가의 문자 클래스 표현식 |
---|---|---|
\\d |
숫자 문자 | [[:digit:]] |
\\D |
숫자를 제외한 문자 | [^[:digit:]] |
\\w |
단어 문자 | [[:word:]] |
\\W |
단어를 제외한 문자 | [^[:word:]] |
\\s |
공백 문자 | [[:space:]] |
\\S |
공백을 제외한 문자 | [^[:space:]] |
\\b |
A boundary word |
예시
다음 표는 POSIX 연산자를 사용한 패턴 일치의 예를 나타낸 것입니다.
표현식 | 반환 |
---|---|
'abc' ~ 'abc' |
True |
'abc' ~ 'a' |
True |
'abc' ~ 'A' |
False |
'abc' ~ '.*(b|d).*' |
True |
'abc' ~ '(b|c).*' |
True |
'AbcAbcdefgefg12efgefg12' ~
'((Ab)?c)+d((efg)+(12))+'
|
True |
'aaaaaab11111xy' ~
'a{6}.[1]{5}(x|y){2}'
|
True |
'$0.87' ~ '\\$[0-9]+(\\.[0-9][0-9])?'
|
True |
'ab c' ~ '[[:space:]]' |
True |
'ab c' ~ '\\s' |
True |
' ' ~ '\\S' |
False |
다음은 이름에 E
또는 H
가 포함된 도시를 찾는 예입니다.
SELECT DISTINCT city FROM users WHERE city ~ '.*E.*|.*H.*' ORDER BY city LIMIT 5; city ----------------- Agoura Hills Auburn Hills Benton Harbor Beverly Hills Chicago Heights
다음 예는 이름에 E
또는 H
가 포함되지 않은 도시를 찾습니다.
SELECT DISTINCT city FROM users WHERE city !~ '.*E.*|.*H.*' ORDER BY city LIMIT 5;
city ----------------- Aberdeen Abilene Ada Agat Agawam
다음은 기본 이스케이프 문자열('\\
')을 사용하여 "마침표"가 포함된 문자열을 찾는 예입니다.
SELECT venuename FROM venue WHERE venuename ~ '.*\\..*' ORDER BY venueid; venuename ------------------------------ St. Pete Times Forum Jobing.com Arena Hubert H. Humphrey Metrodome U.S. Cellular Field Superpages.com Center E.J. Nutter Center Bernard B. Jacobs Theatre St. James Theatre