正規表現を使用してマッチしたパターンの検知回数を調べる

REGEXP_COUNT | ( string , pattern |  |
| [ , position [, match_param]] ) | |
return [ NUMBER ] | | |

string | 対象の文字列式 | |
pattern | 正規表現パターン | |
position | 取り出したい文字列の開始位置(1〜) | default 1 |
match_param | 検索パラメータ | NLS_SORT 依存 |

正規表現パターン
最大で 512 バイトまでの正規表現 ⇒ 正規表現パターン 参照
※ 正規表現パターンに Perl による拡張表現 を使用する場合、例えば \d を指定したとき Perl では最長マッチになるが 各種 REGEXP シリーズ では 最短マッチ となる。
検索パラメータ
デフォルト値としては、大文字小文字の区別は NLS_SORT パラメータ 依存、それ以外は「設定なし」の状態となる。
'cimnx' のように複数のパラメータ指定できるが、競合する設定は左から右に向かって設定が上書きされる。
match_param | 検索方法 |
c | 大文字小文字を区別する(Case sensitive) |
i | 大文字小文字を区別しない(case Insensitive [or Ignore]) |
m | ^$ メタ記号を各行の先頭と末尾に一致させる(Multiple lines) |
n | メタ記号のドット(.) を改行にも一致させる(Newline) |
x | 空白を取り除いて評価する(eXcluding white-space?) |
REGEXP_COUNT 関数の内容 
文字列 string 中の検索開始位置 position から 正規表現パターン文字列 pattern で検索し、その正規表現にマッチした文字列が合計で何個存在したかを戻す。
REGEXP_COUNT 使用例
正規表現で後方からのパターン一致を取り出す
(1 行目) 一番後方から小文字 3文字 にパターンマッチする文字列を取り出す。
(2 行目) 一番後方から大文字 3文字 にパターンマッチ文字列を取り出す。
SQL> select str, ptn,
2 regexp_substr(str, ptn, 1, REGEXP_COUNT(str, ptn)) regexp_last
3 from regexp_count_sample;
STR PTN REGEXP_LAST
------------ ------------------------------ --------------------
aaaBBBcccDDD [[:lower:]]{3} ccc
aaaBBBcccDDD [[:upper:]]{3} DDD
SQL 関数 - REGEXP_COUNT 関連