REGEXP_SUBSTR 関数は、POSIX 正規表現で指定されたパターンに一致する部分文字列を文字列内で検索し、該当する部分文字列を返します。
構文
TEXT REGEXP_SUBSTR
(
srcstr TEXT,
pattern TEXT,
position INT DEFAULT 1,
occurrence INT DEFAULT 1,
modifier TEXT DEFAULT NULL,
subexpression INT DEFAULT 0
)パラメーター
| パラメーター | 説明 |
|---|---|
srcstr | 検索対象の文字列です。 |
pattern | 照合対象となる POSIX 正規表現です。 |
position | srcstr 内の検索開始位置(文字単位)です。デフォルト値は 1(文字列の先頭)です。 |
occurrence | パターンが複数回出現する場合に、何番目の一致結果を返すかを指定します。デフォルト値は 1(最初の一致)です。 |
modifier | パターン照合動作を制御するフラグです。デフォルト値は NULL です。サポートされる値については、「PostgreSQL コアドキュメント」をご参照ください。 |
subexpression | パターン内のどの括弧で囲まれたグループ(サブ式)を返すかを識別します。デフォルト値は 0(完全一致全体)です。サブ式は、開き括弧「」が出現する順に番号付けされます。たとえば、subexpression => 2 を指定すると、パターン内における 2 番目の (…)サブ式 グループでキャプチャされたテキストが返されます。このパラメーターに値を指定する場合は、検索対象の値の一部を分離するために、パターン内に 1 つ以上の括弧のセットを含める必要があります。 |
例
発生順序による部分文字列の抽出
以下の例では、電話番号の文字列から連続する 3 桁の数字のグループを検索します。
最初の一致を返す場合(occurrence => 1):
polardb=# SELECT REGEXP_SUBSTR('800-555-****', '[0-9][0-9][0-9]', 1, 1) FROM DUAL;
regexp_substr
---------------
800
(1 row)2 番目の一致を返す場合(occurrence => 2):
polardb=# SELECT REGEXP_SUBSTR('800-555-****', '[0-9][0-9][0-9]', 1, 2) FROM DUAL;
regexp_substr
---------------
555
(1 row)