

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# POSIX 연산자
<a name="pattern-matching-conditions-posix"></a>

POSIX 정규 표현식은 일치 패턴을 지정하는 일련의 문자입니다. 문자열이 정규 표현식에 설명된 정규 집합의 멤버인 경우 해당 문자열은 정규 표현식과 일치합니다.

POSIX 정규 표현식은 [LIKE](r_patternmatching_condition_like.md) 및 [SIMILAR TO](pattern-matching-conditions-similar-to.md) 연산자보다 더욱 강력한 패턴 일치 수단을 제공합니다. 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%';
```

## 구문
<a name="pattern-matching-conditions-posix-synopsis"></a>

```
expression [ ! ] ~ pattern
```

## 인수
<a name="pattern-matching-conditions-posix-arguments"></a>

 * expression*   
열 이름 같이 유효한 UTF-8 문자 표현식입니다.

\!  
부정 연산자입니다. 정규 표현식과 일치하지 않습니다.

\~  
대/소문자를 구분하여 *expression*의 하위 문자열과 일치시킵니다.  
`~~`는 [LIKE](r_patternmatching_condition_like.md)의 동의어입니다.

 *pattern*   
정규 표현식 패턴을 나타내는 문자열 리터럴입니다.

*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 는 E 또는 H를 의미합니다. | 
| ^ | 라인 시작 문자를 일치시킵니다. | 
| $  | 라인 끝 문자를 일치시킵니다. | 
| $  | 문자열 끝을 일치시킵니다. | 
| [ ] | 대괄호는 일치하는, 즉 목록의 표현식 1개와 일치해야 하는 목록을 지정합니다. 일치하지 않는, 즉 목록의 표현식을 제외한 모든 문자와 일치하는 목록 앞에는(^)이 입력됩니다. | 
| ( ) | 그룹 항목을 괄호로 묶어 단일 논리 항목으로 처리합니다. | 
| {m} | 이전 항목을 정확히 m번 반복합니다. | 
| {m,} | 이전 항목을 m번 이상 반복합니다. | 
| {m,n} | 이전 항목을 m번 이상, n번 미만 반복합니다. | 
| [: :] | POSIX 문자 클래스 안에 있는 모든 문자를 일치시킵니다. 문자 클래스에서는 Amazon Redshift가 ASCII 문자만 지원합니다..[:alnum:][:alpha:][:lower:][:upper:] | 

다음은 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 |   | 

## 예제
<a name="pattern-matching-conditions-posix-synopsis-examples"></a>

다음 표는 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
```