AnalyticDB for MySQL は、SQL クエリでのパターンマッチング、抽出、置換のために、次の正規表現関数をサポートしています。
REGEXP_INSTR — 一致の位置を返します
REGEXP_MATCHES — すべての一致する部分文字列の配列を返します
REGEXP_REPLACE — 一致する部分文字列を置換します
REGEXP_SUBSTR — 一致する部分文字列を返します
前提条件
開始する前に、以下を確認してください。
AnalyticDB for MySQL クラスターのマイナーエンジンバージョンが 3.1.5.10 以降であること
マイナーエンジンバージョンを確認するには、「AnalyticDB for MySQL クラスターのバージョンを表示するにはどうすればよいですか?」をご参照ください。
REGEXP_INSTR
regexp_instr(source, pattern[, position[, occurrence[, option]]])source 内の最初の(または N 番目の)部分文字列の開始位置または終了位置を示す整数を返します。pattern と一致する部分文字列が見つからない場合は、0 を返します。
パラメーター
必須:
| パラメーター | 型 | 説明 |
|---|---|---|
source | VARCHAR | 検索対象の文字列。 |
pattern | — | 照合する正規表現。 |
オプション:
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
position | BIGINT | 1 | sourceソース内でマッチングを開始する文字位置。 |
occurrence | BIGINT | 1 | 返す一致の発生回数。 |
option | BIGINT | 0 | 01一致の開始位置 (0) を返すか、一致の終了直後の位置 (1) を返すかを制御します。 |
戻り値
BIGINT を返します。一致が見つからない場合は 0 を返します。
例
最初の一致の開始位置を返します
SELECT REGEXP_INSTR('dog cat dog', 'dog') as res;+-----+
| res |
+-----+
| 1 |
+-----+2 番目の一致の開始位置を返します
SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 2) as res;+-----+
| res |
+-----+
| 9 |
+-----+最初の一致の終了後の位置を返します
SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 1, 1) as res;+-----+
| res |
+-----+
| 4 |
+-----+REGEXP_MATCHES
regexp_matches(source, pattern[, flag])ARRAY(ARRAY(VARCHAR)) を返します。これは、source 内の pattern と一致するすべての部分文字列から構成されます。一致するものが見つからない場合は、Empty 配列を返します。
gフラグがない場合: 最初の一致のみを返します。gフラグがある場合: すべての一致を返します。patternにキャプチャグループが含まれている場合、各グループの一致した部分文字列がネストされた配列として返されます。それ以外の場合、完全一致が返されます。
配列ではなく一致する単一の文字列を取得するには、代わりに REGEXP_SUBSTR を使用します。
パラメーター
必須パラメーター:
| パラメーター | 型 | 説明 |
|---|---|---|
source | VARCHAR | 検索対象の文字列。 |
pattern | — | 照合対象の正規表現。 |
任意パラメーター:
| パラメーター | 型 | 説明 |
|---|---|---|
flag | VARCHAR | マッチング動作を制御する 1 文字以上からなるフラグ。最初の 1 件ではなくすべての一致を返すには、g を使用します。 |
戻り値
ARRAY(ARRAY(VARCHAR)) を返します。一致するデータが見つからない場合は、空の配列を返します。
例
キャプチャグループとのマッチ (最初の一致のみ)
SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');+---------------------+
| regexp_matches |
+---------------------+
| [["bar","beque"]] |キャプチャグループなしのマッチ
SELECT regexp_matches('foobarbequebaz', 'barbeque');+---------------------+
| regexp_matches |
+---------------------+
| [["barbeque"]] |`g` フラグを使用したすべての出現箇所とのマッチ
SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');+------------------------------------------+
| regexp_matches |
+------------------------------------------+
| [["bar","beque"], ["bazil","barf"]] |REGEXP_REPLACE
regexp_replace(source, pattern, replacement[, position[, occurrence]])「source」内の「pattern」と一致する部分文字列を、「replacement」で置き換えます。デフォルトでは、先頭の文字から開始してすべての一致を置き換えます。一致が見つからない場合は、元の文字列を返します。
パラメーター
必須:
| パラメーター | 型 | 説明 |
|---|---|---|
source | VARCHAR | 検索対象の文字列。 |
pattern | — | 照合する正規表現。 |
replacement | VARCHAR | 各一致に代入する文字列。 |
オプション:
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
position | BIGINT | 1 | sourceソース内でマッチングを開始する文字位置。 |
occurrence | BIGINT | 0 | 置換する発生回数。0 はすべての一致を置換します。正の整数はその発生のみを置換します。 |
戻り値
VARCHAR を返します。一致が見つからない場合は元の文字列を返します。
例
すべての一致を置換します
SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X') as res;+-------+
| res |
+-------+
| X X X |
+-------+3 番目の一致のみを置換します
SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3) as res;+-----------+
| res |
+-----------+
| abc def X |
+-----------+REGEXP_SUBSTR
regexp_substr(source, pattern[, position[, occurrence]])source 内の pattern と一致する部分文字列を返します。一致するものが見つからない場合は、NULL を返します。
パラメーター
必須:
| パラメーター | 型 | 説明 |
|---|---|---|
source | VARCHAR | 検索対象の文字列。 |
pattern | — | 照合する正規表現。 |
オプション:
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
position | BIGINT | 1 | sourceソース内でマッチングを開始する文字位置。 |
occurrence | BIGINT | 1 | マッチの何番目を返すか。 |
戻り値
VARCHAR を返します。一致が見つからない場合は NULL を返します。
例
3 番目の一致を返します
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3) as res;+------+
| res |
+------+
| ghi |
+------+最初の一致を返します (デフォルト動作)
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+') as res;+------+
| res |
+------+
| abc |
+------+