カテゴリ:

文字列関数(正規表現)

REGEXP

サブジェクトが指定されたパターンに一致する場合、trueを返します。両方の入力はテキスト式でなければなりません。

エイリアス

RLIKE (2番目の構文)

文字列関数(正規表現) もご参照ください。

構文

<subject> REGEXP <pattern>

使用上の注意

  • 関数は暗黙的に両端でパターンを固定します(つまり、 '' は自動的に '^$' になり、 'ABC' は自動的に '^ABC$' になります)。ABCで始まる文字列と一致する場合、パターンは 'ABC.*' になります。

  • 使用上の注意については、正規表現関数の 一般的な使用上の注意 をご参照ください。

照合の詳細

Arguments with collation specifications are currently not supported.

以下の例は、単純なワイルドカード式で REGEXP を使用する方法を示しています。

テーブルを作成してデータをロードします。

CREATE OR REPLACE TABLE strings (v VARCHAR(50));
INSERT INTO strings (v) VALUES
    ('San Francisco'),
    ('San Jose'),
    ('Santa Clara'),
    ('Sacramento');

ワイルドカードを使用してパターンを検索します。

SELECT v
    FROM strings
    WHERE v REGEXP 'San* [fF].*'
    ORDER BY v;
+---------------+
| V             |
|---------------|
| San Francisco |
+---------------+

バックスラッシュ文字 \ は、正規表現のエスケープ文字であり、特殊文字または文字のグループを指定します。たとえば、 \s は空白の正規表現です。

リテラル文字列を解析するSnowflake文字列パーサーは、バックスラッシュをエスケープ文字 としても 扱います。たとえば、バックスラッシュ記号は、タブ文字を指定する文字シーケンスの一部として使用されます。したがって、単一のバックスラッシュ記号を含む文字列を作成するには、バックスラッシュ記号を 2つ 指定する必要があります。たとえば、以下の入力ステートメントの文字列を、出力の対応する文字列と比較します。

INSERT INTO strings (v) VALUES
    ('Contains embedded single \\backslash')
    ;
SELECT * 
    FROM strings
    ORDER BY v;
+-------------------------------------+
| V                                   |
|-------------------------------------|
| Contains embedded single \backslash |
| Sacramento                          |
| San Francisco                       |
| San Jose                            |
| Santa Clara                         |
+-------------------------------------+

この例は、「San」で始まる文字列を検索する方法を示しています。「San」は完全な単語です(例:「Santa」の一部ではない)。 \b は、単語境界のエスケープシーケンスです。

select v, v regexp 'San\\b.*' AS MATCHES
    from strings
    order by v;
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | False   |
| Sacramento                          | False   |
| San Francisco                       | True    |
| San Jose                            | True    |
| Santa Clara                         | False   |
+-------------------------------------+---------+

この例は、空白とそれに続くバックスラッシュ記号を検索する方法を示しています。検索する単一のバックスラッシュは、以下の 4つ のバックスラッシュで表されることに注意してください。 REGEXP がリテラルのバックスラッシュを探すには、そのバックスラッシュをエスケープする必要があるため、2つのバックスラッシュが必要です。文字列パーサーでは、これらのバックスラッシュのそれぞれをエスケープする必要があるため、式には、式が検索する1つのバックスラッシュを表す4つのバックスラッシュが含まれています。

select v, v regexp '.*\\s\\\\.*' AS MATCHES
    from strings
    order by v;
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+

The following example is the same as the preceding example, except that it uses $$ as a string delimiter to tell the string parser that the string is a literal and that backslashes should not be interpreted as escape sequences. (The backslashes are still interpreted as escape sequences by REGEXP.)

select v, v regexp $$.*\s\\.*$$ AS MATCHES
    from strings
    order by v;
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+