

 Amazon Redshift は、2026 年 6 月 30 日以降、Python UDF の使用をサポートしなくなります。これは段階的に実施されます。Python のサポート終了と移行オプションの詳細については、2025 年 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 文字式。

\!  
拒否演算子。正規表現パターンに一致しません。

\~  
*式*の部分文字列に対して大文字/小文字を区別するマッチングを実行します。  
`~~` は [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  | 説明  | 
| --- | --- | 
| .  | 任意の 1 文字をマッチングします。 | 
| \* | 直前文字の 0 回以上の出現にマッチングします。 | 
| \+ | 直前文字の 1 回以上の出現にマッチングします。 | 
| ? | 直前文字の 0 回または 1 回の出現にマッチングします。 | 
| \| | いずれかへのマッチングを指定します。例えば E \| H  は E または H にマッチングします。 | 
| ^ | 行頭の文字にマッチングします。 | 
| $  | 行末の文字にマッチングします。 | 
| $  | 文字列の末尾をマッチングします。 | 
| [ ] | 角かっこでマッチングする文字のリストを指定します。リスト内のいずれかの文字にマッチングします。マッチングしない文字のリストにはその前にキャレット (^) を置きます。リスト内のいずれの文字以外の文字にマッチングします。 | 
| ( ) | グループ項目を括弧で囲んで、単一の論理項目にします。 | 
| {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 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
```