カテゴリ:

文字列関数(正規表現)

RLIKE

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

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

エイリアス

REGEXP (2番目の構文)、 REGEXP_LIKE (最初の構文)

こちらもご覧ください

ILIKE , LIKE

REGEXP_COUNTREGEXP_INSTRREGEXP_REPLACEREGEXP_SUBSTR

構文

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

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

引数

必須:

サブジェクト

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

パターン

一致するパターンです。

オプション:

パラメーター

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

c , i , m , e , s

詳細については、 パラメーター をご参照ください。

デフォルト: c

使用上の注意

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

  • その他の使用上の注意については、 一般的な使用上の注意 をご参照ください。

  • デフォルトのエスケープ文字はありません。

  • 円記号をエスケープ文字として使用する場合、 ESCAPE 句で円記号のエスケープを指定する必要があります。例えば、次のコマンドは、エスケープ文字がバックスラッシュであることを指定し、そのエスケープ文字を使用してリテラルとして「%」を検索します(エスケープ文字なしでは、「%」はワイルドカードとして扱われます)。

    'SOMETHING%' LIKE '%\\%%' ESCAPE '\\';
    

    エスケープ文字の使用例、特にエスケープ文字としてのバックスラッシュについては、 LIKE 関数 の例をご参照ください。

照合の詳細

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      |
+---------------+

電話番号と電子メールアドレスの形式をテストするときに、true/false値を返します。

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

SELECT rlike('800-456-7891','[2-9]\\d{2}-\\d{3}-\\d{4}') FROM dual;

+---------------------------------------------------+
| RLIKE('800-456-7891','[2-9]\\D{2}-\\D{3}-\\D{4}') |
|---------------------------------------------------|
| True                                              |
+---------------------------------------------------+

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

+-------------------------------------------------------------+
| RLIKE('JSMITH@EMAIL.COM','\\W+@[A-ZA-Z_]+?\.[A-ZA-Z]{2,3}') |
|-------------------------------------------------------------|
| 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}') FROM dual;

+---------------------------------------------------------+
| RLIKE('800-456-7891','[2-9][0-9]{2}-[0-9]{3}-[0-9]{4}') |
|---------------------------------------------------------|
| True                                                    |
+---------------------------------------------------------+

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

+-------------------------------------------------------------------+
| RLIKE('JSMITH@EMAIL.COM','[A-ZA-Z_]+@[A-ZA-Z_]+?\.[A-ZA-Z]{2,3}') |
|-------------------------------------------------------------------|
| True                                                              |
+-------------------------------------------------------------------+

2番目の構文

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

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

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