構文
用途
REGEXP_COUNT
は、ソース文字列でパターンが発生した回数を戻すことによって、REGEXP_INSTR
ファンクションの機能を補完します。このファンクションでは、入力キャラクタ・セットによって定義された文字を使用して文字列を評価します。また、pattern
の発生回数を示す整数を戻します。一致する値が見つからない場合は0(ゼロ)を戻します。
source_char
は、検索値として使用される文字式です。通常は文字列であり、データ型はCHAR
、VARCHAR2
、NCHAR
、NVARCHAR2
、CLOB
またはNCLOB
のいずれかです。
pattern
は正規表現です。通常はテキスト・リテラルであり、データ型はCHAR
、VARCHAR2
、NCHAR
またはNVARCHAR2
のいずれかになります。ここには、 512バイトまで入力できます。pattern
のデータ型がsource_char
のデータ型と異なる場合、Oracleはpattern
をsource_char
のデータ型に変換します。
REGEXP_COUNT
は、pattern
内の部分正規表現のカッコを無視します。たとえば、パターン'(123(45))'
は、'12345'
と同じです。pattern
で指定できる演算子のリストは、付録D「Oracleの正規表現のサポート」を参照してください。
position
は、Oracleが検索を開始する文字source_char
の位置を示す正の整数です。デフォルトは1で、source_char
の最初の文字から検索が開始されます。1番目のpattern
の出現が検出されると、その後に続く文字以降の2番目の出現が検索されます。
match_param
は、ファンクションのデフォルトの検索動作を変更するためのテキスト・リテラルです。match_param
には次の値を1つ以上指定できます。
'i'
: 大/小文字を区別せずに検索します。
'c'
: 大/小文字を区別して検索します。
'n'
: 任意の文字に一致する文字であるピリオド(.)を、改行文字の一致に使用します。このパラメータを指定しない場合、ピリオドは改行文字には一致しません。
'm'
: ソース文字列を複数行として処理します。Oracleは、キャレット(^
)およびドル記号($
)を、それぞれ、ソース文字列全体の開始または終了としてのみではなく、ソース文字列内の任意の場所にある任意の行の開始または終了としても解釈します。このパラメータを指定しない場合、Oracleはソース文字列を単一行として処理します。
'x'
は空白文字を無視します。デフォルトでは、空白文字は空白文字として一致します。
複数の矛盾する値を指定すると、最後の値が使用されます。たとえば、'ic'
を指定すると、大/小文字を区別する検索が行われます。前述以外の文字を指定すると、エラーが戻されます。
match_param
を指定しない場合、次のようになります。
大/小文字を区別するかどうかのデフォルトは、NLS_SORT
パラメータの値によって決まります。
ピリオド(.)は改行文字に一致しません。
ソース文字列は単一行として処理されます。
例
次の例では、pattern内の部分正規表現のカッコが無視されることを示します。
SELECT REGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT FROM DUAL; REGEXP_COUNT ------------ 5
次の例では、ファンクションは3番目の文字でソース文字列の評価を開始するため、patternの最初の出現はスキップされます。
SELECT REGEXP_COUNT('123123123123', '123', 3, 'i') COUNT FROM DUAL; COUNT ---------- 3