REGEXP_COUNT 関数
文字列で正規表現パターンを検索し、この指定されたパターンが文字列内に出現する回数を示す整数を返します。一致がない場合、この関数は 0
を返します。正規表現の詳細については、Wikipedia の「POSIX 演算子」と「正規表現
構文
REGEXP_COUNT( source_string, pattern [, position [, parameters ] ] )
引数
- source_string
-
CHAR
またはVARCHAR
文字列。 - pattern
-
正規表現パターンを表す UTF-8 文字列リテラル。詳細については、「POSIX 演算子」を参照してください。
- position
-
(オプション) 検索を開始する source_string 内の位置を示す正の
INTEGER
。position はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。デフォルト:1
。position が1
より小さい場合、source_string の最初の文字から検索が開始されます。position が source_string の文字数より大きい場合、結果は0
になります。 - parameters
-
(オプション) 関数がパターンとどのように一致するかを示す 1 つ以上のリテラル文字列。取り得る値には以下のものがあります。
-
c – 大文字と小文字を区別する一致を実行します。デフォルトでは大文字と小文字を区別するマッチングを使用します。
-
i – 大文字と小文字を区別しない一致を実行します。
-
p – Perl 互換正規表現 (PCRE) 言語でパターンを解釈します。PCRE の詳細については、Wikipedia の「Perl 互換の正規表現
」を参照してください。
-
戻り型
INTEGER
例
3 文字のシーケンスが出現する回数をカウントするには、次の例を使用します。
SELECT REGEXP_COUNT('abcdefghijklmnopqrstuvwxyz', '[a-z]{3}');
+--------------+ | regexp_count | +--------------+ | 8 | +--------------+
大文字と小文字を区別しない一致を使用して、文字列 FOX
の出現をカウントするには、次の例を使用します。
SELECT REGEXP_COUNT('the fox', 'FOX', 1, 'i');
+--------------+ | regexp_count | +--------------+ | 1 | +--------------+
PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索するには、次の例を使用します。この例では、PCRE で特定の先読みの意味を持つ ?=
演算子を使用します。この例では、大文字と小文字を区別して、このような単語の出現回数をカウントします。
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'p');
+--------------+ | regexp_count | +--------------+ | 2 | +--------------+
PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索するには、次の例を使用します。これは、PCRE で特定の意味を持つ ?=
演算子を使用します。この例では、このような単語の出現回数をカウントしますが、大文字と小文字を区別しない一致結果を使用する点で前の例とは異なります。
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'ip');
+--------------+ | regexp_count | +--------------+ | 3 | +--------------+
次の例では、TICKIT サンプルデータベースの USERS テーブルからのデータを使用します。詳細については、「サンプルデータベース」を参照してください。
最上位ドメイン名が org
または edu
である回数をカウントするには、次の例を使用します。
SELECT email, REGEXP_COUNT(email,'@[^.]*\.(org|edu)') FROM users ORDER BY userid LIMIT 4;
+-----------------------------------------------+--------------+ | email | regexp_count | +-----------------------------------------------+--------------+ | Etiam.laoreet.libero@sodalesMaurisblandit.edu | 1 | | Suspendisse.tristique@nonnisiAenean.edu | 1 | | amet.faucibus.ut@condimentumegetvolutpat.ca | 0 | | sed@lacusUtnec.ca | 0 | +-----------------------------------------------+--------------+