

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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 規則表達式的模式可以符合字串的任何部分，不像 SIMILAR TO 運算子只在其模式符合整個字串時，才會傳回 true。

**注意**  
使用或 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>

 *表達式*   
有效的 UTF-8 字元表達式，例如資料欄的名稱。

\!  
否定運算子。不符合規則運算式。

\~  
針對 *expression* 的任何子字串，進行區分大小寫的比對。  
`~~` 是 [LIKE](r_patternmatching_condition_like.md) 的同義詞。

 *pattern*   
代表規則運算式模式的字串常值。

如果*模式*未包含萬用字元，則模式只代表字串本身。

若要搜尋包含中繼字元 (例如「`. * | ? `」等) 的字串，請使用兩個反斜線 (「` \\`」) 來逸出字元。不像 `SIMILAR TO` 和 `LIKE`，POSIX 規則表達式的語法不支援使用者定義的逸出字元。

兩個字元表達式都可以是 CHAR 或 VARCHAR 資料類型。如果不同，Amazon Redshift 會將 *pattern* 轉換為 *expression* 的資料類型。

所有的字元表達式都可以是 CHAR 或 VARCHAR 資料類型。如果運算式的資料類型不同，Amazon Redshift 會將其轉換為 *expression* 的資料類型。

POSIX 模式比對支援下列的中繼字元：


| POSIX  | Description  | 
| --- | --- | 
| .  | 比對任一個單一字元。 | 
| \* | 比對出現 0 次或更多次。 | 
| \+ | 比對出現 1 次或更多次。 | 
| ? | 比對出現 0 次或 1 次。 | 
| \| | 指定交替比對；例如，E \| H  代表 E 或 H。 | 
| ^ | 比對行首字元。 | 
| $  | 比對行尾字元。 | 
| $  | 比對字串結尾。 | 
| [ ] | 方括號用來表示符合的清單，應符合清單中的一個表達式。插入符號 (^) 會出現在不符合清單的前面，此清單會比對除了清單中所顯示表達式以外的所有字元。 | 
| ( ) | 括號可將多個項目分組為單一邏輯項目。 | 
| {m} | 重複前一個項目 m 次。 | 
| {m,} | 重複前一個項目 m 次或更多次。 | 
| {m,n} | 重複前一個項目至少 m 次，而且不超過 n 次。 | 
| [: :] | 比對 POSIX 字元類別內的任何字元。在下列的字元類別中，Amazon Redshift 只支援 ASCII 字元：[:alnum:]、[:alpha:]、[:lower:]、[:upper:] | 

Amazon Redshift 支援下列的 POSIX 字元類別。


| 字元類別  | Description  | 
| --- | --- | 
| [[:alnum:]] | 所有 ASCII 英數字元 | 
| [[:alpha:]] | 所有 ASCII 字母字元 | 
| [[:blank:]] | 所有空白字元 | 
| [[:cntrl:]] | 所有控制字元 (非列印) | 
| [[:digit:]] | 所有數字位數 | 
| [[:lower:]] | 所有小寫 ASCII 字母字元 | 
| [[:punct:]] | 所有標點符號字元 | 
| [[:space:]] | 所有空格字元 (非列印) | 
| [[:upper:]] | 所有大寫 ASCII 字母字元 | 
| [[:xdigit:]] | 所有的有效十六進位字元 | 

 Amazon Redshift 在規則運算式中支援下列受到 Perl 影響的運算子。使用兩個反斜線 (「`\\`」) 來逸出運算子。  


| 運算子 | Description  | 同等的字元類別表達式 | 
| --- | --- | --- | 
| \\\\d | 數字字元 | [[:digit:]] | 
| \\\\D | 非數字字元 | [^[:digit:]] | 
| \\\\w | 字詞字元 | [[:word:]] | 
| \\\\W | 非字詞字元 | [^[:word:]] | 
| \\\\s | 空白字元 | [[:space:]] | 
| \\\\S | 非空白字元 | [^[:space:]] | 
| \\\\b | 邊界文字 |   | 

## 範例
<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
```