MariaDBでは、REGEXP_INSTR()
関数は、正規表現パターンに一致する部分文字列の開始インデックスを返します。
インデックスは1
から始まります 。一致するものがない場合、結果は0
になります。 。
構文
構文は次のようになります:
REGEXP_INSTR(subject, pattern)
subject
入力文字列であり、pattern
部分文字列の正規表現パターンです。
これを書いている時点では、MariaDBのバージョンのREGEXP_INSTR()
MySQLのREGEXP_INSTR()
よりも少ない引数を受け入れます 。 MySQLのバージョンでは、検索の開始位置、検索するオカレンス、返す位置のタイプ、および正規表現を絞り込む方法の引数を提供できます。
例
基本的な例は次のとおりです。
SELECT REGEXP_INSTR('Cat', 'at');
結果:
+---------------------------+ | REGEXP_INSTR('Cat', 'at') | +---------------------------+ | 2 | +---------------------------+
この場合、一致があり、部分文字列は位置2から始まります。
一致なし
一致するものがない例を次に示します。
SELECT REGEXP_INSTR('Cat', '^at');
結果:
+----------------------------+ | REGEXP_INSTR('Cat', '^at') | +----------------------------+ | 0 | +----------------------------+
一致するものがないため、結果は0
になります。 。文字列は部分文字列で始まる必要があると指定したため、一致するものはありません。
そうするように変更しましょう その部分文字列から始めます:
SELECT REGEXP_INSTR('at', '^at');
結果:
+---------------------------+ | REGEXP_INSTR('at', '^at') | +---------------------------+ | 1 | +---------------------------+
大文字と小文字の区別
REGEXP_INSTR()
関数は、効果的な照合の大文字と小文字の区別の規則に従います。照合は、大文字と小文字を区別しない照合では大文字と小文字を区別せずに実行され、大文字と小文字を区別する照合とバイナリデータでは大文字と小文字を区別して実行されます。
次に例を示します:
SELECT
REGEXP_INSTR('Cat', 'c') AS "My Default",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_ci, 'c') AS "Case Insensitive",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_cs, 'c') AS "Case Sensitive";
結果:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | 1 | 1 | 0 | +------------+------------------+----------------+
私のデフォルトの照合では大文字と小文字は区別されません。他の2つの文字列は、大文字と小文字を区別しない照合と大文字と小文字を区別する照合にそれぞれ強制されました。
BINARY
を提供する 文字列でも大文字と小文字が区別されます(以下を参照)。
バイナリ文字列
デフォルトでは、位置はバイトではなく文字で測定されます。ただし、マルチバイト文字セットをBINARY
にキャストできます。 必要に応じて、オフセットをバイト単位で取得します。
例:
SELECT
REGEXP_INSTR('© Cat', 'C') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";
結果:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 4 | +-----------+--------+
著作権記号は2バイトを使用するため、この例では4
の結果が得られます。 BINARY
にキャストする場合 、3
と比較 そうでなければ得ます。
BINARY
を渡すことに注意してください 文字列は大文字と小文字の区別にも影響します。 BINARY
を使用 文字列の場合、大文字は小文字とは異なります:
SELECT
REGEXP_INSTR('© Cat', 'c') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";
結果:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 0 | +-----------+--------+
ここでは、小文字のc
を検索しました 大文字の代わりに、BINARY
文字列が一致しませんでした。
ヌル引数
null
を渡す 引数を指定するとnull
になります。 :
SELECT
REGEXP_INSTR(null, 'c') AS "1",
REGEXP_INSTR('Cat', null) AS "2",
REGEXP_INSTR(null, null) AS "3";
結果:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
引数の数が間違っています
間違った数の引数を渡すか、引数を渡さないと、エラーが発生します:
SELECT REGEXP_INSTR('Cat');
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'