REGEXP_INSTR 関数は、文字列内で POSIX 正規表現パターンを検索し、一致した位置を返します。
構文
INTEGER REGEXP_INSTR
(
srcstr TEXT,
pattern TEXT,
position INT DEFAULT 1,
occurrence INT DEFAULT 1,
returnparam INT DEFAULT 0,
modifier TEXT DEFAULT NULL,
subexpression INT DEFAULT 0,
)パラメーター
必須パラメーター
| パラメーター | 説明 |
|---|---|
srcstr | 検索対象の文字列です。 |
pattern | 一致させる正規表現パターンです。 |
任意パラメーター
| パラメーター | デフォルト値 | 説明 |
|---|---|---|
position | 1 | srcstr 内の検索開始位置(文字単位)です。 |
occurrence | 1 | パターンが複数回出現する場合に、何番目の一致位置を返すかを指定します。occurrence - 1 回分の一致をスキップします。たとえば、occurrence => 2 を指定すると、最初の一致をスキップし、2 番目の一致の位置を返します。 |
returnparam | 0 | 返される位置の基準を制御します。0 の場合、一致した文字列の先頭文字の位置を返します。0 より大きい値を指定した場合、一致した文字列の末尾直後の文字の位置を返します。 |
modifier | NULL | パターンマッチングの動作を制御するフラグです。使用可能なすべてのフラグについては、「PostgreSQL ドキュメント」をご参照ください。 |
subexpression | 0 | どのキャプチャグループの位置を取得するかを指定します。非ゼロ値を指定する場合は、pattern 内で検索対象の一部を抽出するために、1 つ以上の括弧のペアを含める必要があります。たとえば、subexpression => 2 を指定すると、2 番目のキャプチャグループの位置を返します。 |
例
パターンの最初の出現位置を検索する
'800-555-1212' の中から、連続する 3 桁の数字の最初のグループを検索します。
polardb=# SELECT REGEXP_INSTR('800-555-1212', '[0-9][0-9][0-9]', 1, 1) FROM DUAL;
regexp_instr
--------------
1
(1 row)一致は位置 1(800)から始まります。
パターンの 2 番目の出現位置を検索する
最初の一致をスキップして 2 番目の一致を検索するには、2 を occurrence パラメーターとして指定します。
polardb=# SELECT REGEXP_INSTR('800-555-1212', '[0-9][0-9][0-9]', 1, 2) FROM DUAL;
regexp_instr
--------------
5
(1 row)2 番目の一致(555)は位置 5 から始まります。