正規表現を使用して文字列とパターンマッチングしているか判別する
REGEXP_LIKE | ( string , pattern [, match] ) |
return [ boolean ] | |
- 正規表現に一致すれば 「真」一致しなければ「偽」を戻す。
正規表現パターン
最大で 512 バイトまでの正規表現 ⇒ 正規表現パターン 参照
Perl による拡張表現 を使用する場合、例えば \d を指定したとき Perl では最長マッチになるが REGEXP_LIKE では 最短マッチ となる。
検索パラメータ
デフォルト値は大文字小文字の区別は NLS_SORT パラメータ 依存、それ以外は「設定なし」の状態となる。
'cimnx' のように複数のパラメータ指定できるが、競合する設定は左から右に向かって設定が上書きされる。
match_param | 検索方法 |
c | 大文字小文字を区別する(Case sensitive) |
i | 大文字小文字を区別しない(case Insensitive [or Ignore]) |
m | ^$ メタ記号を各行の先頭と末尾に一致させる(Multiple lines) |
n | メタ記号のドット(.) を改行にも一致させる(Newline) |
x | 空白を取り除いて評価する(eXcluding white-space?:Oracle 10g R2) |
REGEXP_LIKE 関数の内容 (正規表現 ができる LIKE 条件)
文字列 string 中に 正規表現パターン文字列 pattern にパターンマッチする表現があれば TRUE、なければ FALSE となる。
REGEXP_LIKE の戻り値は LNNVL 関数 と同様 BOOLEAN 型であるため、基本的には WHERE 句 に記述する。
REGEXP_LIKE は「条件」という位置付けにある関数なので CASE 式 と併用して SELECT などの選択式に記述しても問題ないと思われる。
REGEXP_LIKE 使用例
JPのドメインであるかどうか調べる
SQL> select str, ptn,
2 case when REGEXP_LIKE(str, ptn, 'i') then 'JPドメイン'
3 else 'それ以外' end reg_like
4 from regexp_like_sample;
STR PTN REG_LIKE
-------------------------------- -------------------- --------------------
example.com (\.jp$) それ以外
example.net (\.jp$) それ以外
example.co.jp (\.jp$) JPドメイン
example.ne.jp (\.jp$) JPドメイン
example.jp (\.jp$) JPドメイン
ドメイン名例.JP (\.jp$) JPドメイン
JPドメインにパターンマッチしたデータを抽出する
SQL> select str from regexp_like_sample where REGEXP_LIKE(str, ptn, 'i') ;
STR
--------------------------------
example.co.jp
example.ne.jp
example.jp
ドメイン名例.JP
PL/SQL による REGEXP_LIKE の使用例
SQL> declare
2 vStr varchar2(10);
3 begin
4 vStr := '首都東京';
5 if (REGEXP_LIKE(vStr,'[京都]')) then
6 dbms_output.put_line('文字列に京と都が含まれています');
7 end if;
8 end;
9 /
文字列に京と都が含まれています
関連事項
SQL 関数 - REGEXP_LIKE 関連