Oracleの正規表現サポート
使い方
正規表現用の関数をコールする。以下で、各関数を説明する。
なお、引数名の先頭が「*」の引数は省略可能。省略可能な引数の指定を省略した場合のデフォルト値は、()で囲んで示す。
1. REGEXP_LIKE(<文字列式>, <パターン文字列>, <パターンマッチング修飾子>)
- 指定された文字列式が、パターンにマッチする場合にTRUEを返す
- 詳細は、『REGEXP_LIKE』
- 以下、サンプル
SELECT 'マッチ' FROM DUAL WHERE REGEXP_LIKE('hogefuga', 'gef')
→'マッチ'が検索される
SELECT 'マッチ' FROM DUAL WHERE REGEXP_LIKE('hogefuga', 'geF')
→何も検索されない
SELECT 'マッチ' FROM DUAL WHERE REGEXP_LIKE('hogefuga', 'geF', 'i')
→'マッチ'が検索される
2. REGEXP_REPLACE(<文字列式>, <パターン文字列>, <置換文字列>, <*検索開始位置(1:先頭文字)>, <*マッチング回数(0:無限)>, <*パターンマッチング修飾子>)
- 指定された文字列式の、パターンにマッチする部分を、指定された文字列に置換した文字列を返す
- 詳細は、『REGEXP_REPLACE』
- 以下、サンプル
SELECT REGEXP_REPLACE('HOGEFUGEFUGA', 'geF', 'gah', 1, 0, 'i') FROM DUAL
→'HOgahUgahUGA'が検索される
SELECT REGEXP_REPLACE('HOGEFUGEFUGA', 'geF', 'gah', 1, 1, 'i') FROM DUAL
→'HOgahUGEFUGA'が検索される
SELECT REGEXP_REPLACE('HOGEFUGEFUGA', 'geF', 'gah', 4, 0, 'i') FROM DUAL
→'HOGEFUgahUGA'が検索される
3. REGEXP_INSTR(<文字列式>, <パターン>, <*検索開始位置(1:先頭文字)>, <*取り出すまでの検知回数(1)>, <*検出文字位置のオフセット(0)>, <*パターンマッチング修飾子>)
- 指定された文字列式の、パターンにマッチする部分の開始位置(何文字目か)を返す
- 詳細は、『REGEXP_INSTR』
- 私には、引数「検出文字位置のオフセット」の使い方がよくわからない
- 以下、サンプル
SELECT REGEXP_INSTR('HOGEFUGEFUGA', 'geF', 1, 1, 0, 'i') FROM DUAL
→3が検索される
SELECT REGEXP_INSTR('HOGEFUGEFUGA', 'geF', 1, 2, 0, 'i') FROM DUAL
→7が検索される
SELECT REGEXP_INSTR('HOGEFUGEFUGA', 'geF', 1, 3, 0, 'i') FROM DUAL
→0が検索される
4. REGEXP_SUBSTR(<文字列式>, <パターン>, <*検索開始位置(1:先頭文字)>, <*取り出すまでの検知回数(1)>, <*パターンマッチング修飾子>)
- 指定された文字列式の、パターンにマッチする部分の文字列を返す
- 詳細は、『REGEXP_SUBSTR』
- 以下、サンプル
SELECT REGEXP_SUBSTR('hogefuGeFUGA', 'geF', 1, 1, 'i') FROM DUAL
→'gef'が検索される
SELECT REGEXP_SUBSTR('hogefuGeFUGA', 'geF', 1, 2, 'i') FROM DUAL
→'GeF'が検索される
パターンマッチング修飾子
一般的な正規表現エンジンが備える修飾子が使える。
- i:大/小文字区別なし
- c:大/小文字区別あり
- n:'.'(ピリオド)を改行にマッチさせない
- m:複数行モード
- x:パターン内の空白文字無視