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

syntax

REGEXP_COUNT( string , patternOracle 11g
[ , position [, match_param]] )
return [ NUMBER ]

parameter

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

return

  • 正規表現にマッチした回数

正規表現パターン

最大で 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?:Oracle 10g R2)

REGEXP_COUNT 関数の内容 Oracle 11g

文字列 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 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)