カテゴリ:

文字列関数(正規表現)

RLIKE

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

RLIKE は LIKE 関数に似ていますが、 SQL LIKE パターン構文ではなく POSIX 拡張正規表現を使用します。LIKEよりも複雑な一致条件をサポートします。

エイリアス

REGEXP (2番目の構文)、 REGEXP_LIKE (1番目の構文)

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

構文

-- 1st syntax
RLIKE( <subject> , <pattern> [ , <parameters> ] )

-- 2nd syntax
<subject> RLIKE <pattern>

引数

必須:

サブジェクト

一致するサブジェクトです。

パターン

一致するパターンです。

オプション:

パラメーター

一致の検索に使用されるパラメーターを指定する1つ以上の文字の文字列です。サポートされている値:

cimes

詳細については、 正規表現のパラメーターの指定 をご参照ください。

デフォルト: c

戻り値

戻り値のデータ型は BOOLEAN です。

使用上の注意

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

  • バックスラッシュ文字(\)はエスケープ文字です。詳細については、 一重引用符で囲まれた文字列定数での正規表現の指定 をご参照ください。

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

照合の詳細

Arguments with collation specifications are currently not supported.

次のコマンドを実行して、このトピックの例のデータを設定します。

CREATE OR REPLACE TABLE rlike_ex(city varchar(20));
INSERT INTO rlike_ex VALUES ('Sacramento'), ('San Francisco'), ('San Jose'), (null);

最初の構文

次の例では、ワイルドカードを使用して大文字と小文字を区別しないパターンマッチングを実行します。

SELECT * FROM rlike_ex WHERE RLIKE(city, 'san.*', 'i');

+---------------+
| CITY          |
|---------------|
| San Francisco |
| San Jose      |
+---------------+

次の例では、文字列が電話番号とメールアドレスの形式と一致するかどうかを判断します。これらの例では、正規表現でバックスラッシュがエスケープされないように、正規表現は ドル引用符で囲まれた文字列 で指定されています。

SELECT RLIKE('800-456-7891', $$[2-9]\d{2}-\d{3}-\d{4}$$) AS matches_phone_number;

+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True                 |
+----------------------+

SELECT RLIKE('jsmith@email.com',$$\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$$) AS matches_email_address;

+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True                  |
+-----------------------+

次の例は同じ一致を実行しますが、 一重引用符で囲まれた文字列定数 を使用して正規表現を指定します。

この例では一重引用符で囲まれた文字列定数を使用しているため、 各バックスラッシュは別のバックスラッシュでエスケープする必要があります

-- Escape the backslash character (\) in \w and \d

SELECT RLIKE('800-456-7891','[2-9]\\d{2}-\\d{3}-\\d{4}') AS matches_phone_number;

+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True                 |
+----------------------+

SELECT RLIKE('jsmith@email.com','\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}') AS matches_email_address;

+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True                  |
+-----------------------+

-- Alternatively, rewrite the statements and avoid sequences that rely on the backslash character

SELECT RLIKE('800-456-7891','[2-9][0-9]{2}-[0-9]{3}-[0-9]{4}') AS matches_phone_number;

+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True                 |
+----------------------+

SELECT RLIKE('jsmith@email.com','[a-zA-Z_]+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}') AS matches_email_address;

+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True                  |
+-----------------------+

2番目の構文

大文字と小文字を区別するパターンマッチング:

SELECT * FROM rlike_ex WHERE city RLIKE 'San.* [fF].*';

+---------------+
| CITY          |
|---------------|
| San Francisco |
+---------------+

追加の例

正規表現のその他の例については、 REGEXP をご参照ください。