正規表現関数

すべての正規表現関数は、Java パターン 構文を使用しますが、いくつかの注目すべき例外があります。

  • 複数行モード((?m) フラグで有効化)を使用する場合、\n のみが行終端記号として認識されます。さらに、(?d) フラグはサポートされておらず、使用しないでください。

  • 大文字と小文字を区別しないマッチング((?i) フラグで有効化)は、常にUnicodeを認識した方法で実行されます。ただし、コンテキスト依存およびロケール依存のマッチングはサポートされていません。さらに、(?u) フラグはサポートされておらず、使用しないでください。

  • サロゲートペアはサポートされていません。たとえば、\uD800\uDC00U+10000 として扱われず、\x{10000} として指定する必要があります。

  • 境界(\b)は、基底文字のない非スペーシングマークに対して正しく処理されません。

  • \Q\E は、文字クラス([A-Z123] など)ではサポートされておらず、リテラルとして扱われます。

  • Unicode文字クラス(\p{prop})は、以下の違いを伴ってサポートされています。

    • 名前のすべての下線は削除する必要があります。たとえば、Old_Italic の代わりに OldItalic を使用します。

    • スクリプトは、Isscript=、または sc= 接頭辞なしで直接指定する必要があります。例:\p{Hiragana}

    • ブロックは、In 接頭辞を付けて指定する必要があります。block= および blk= 接頭辞はサポートされていません。例:\p{InMongolian}

    • カテゴリは、Isgeneral_category=、または gc= 接頭辞なしで直接指定する必要があります。例:\p{L}

    • バイナリプロパティは、Is なしで直接指定する必要があります。例:\p{NoncharacterCodePoint}

regexp_extract_all(文字列, パターン) -> array(varchar)

文字列 内で正規表現 パターン に一致する部分文字列を返します。

SELECT regexp_extract_all('1a 2b 14m', '\d+'); -- [1, 2, 14]
regexp_extract_all(文字列, パターン, グループ) -> array(varchar)

文字列 内の正規表現 パターン のすべての一致を検索し、キャプチャグループ番号 グループ を返します。

SELECT regexp_extract_all('1a 2b 14m', '(\d+)([a-z]+)', 2); -- ['a', 'b', 'm']
regexp_extract(文字列, パターン) -> varchar()

文字列 内で正規表現 パターン に一致する最初の部分文字列を返します。

SELECT regexp_extract('1a 2b 14m', '\d+'); -- 1
regexp_extract(文字列, パターン, グループ) -> varchar()

文字列 内の正規表現 パターン の最初の一致を検索し、キャプチャグループ番号 グループ を返します。

SELECT regexp_extract('1a 2b 14m', '(\d+)([a-z]+)', 2); -- 'a'
regexp_like(文字列, パターン) -> boolean()

正規表現 パターン を評価し、それが 文字列 に含まれているかどうかを判断します。

この関数は LIKE 演算子に似ていますが、パターンは 文字列 全体と一致する必要はなく、文字列 に含まれているだけでよい点が異なります。言い換えれば、これは*一致*操作ではなく*包含*操作を実行します。^$ を使用してパターンを固定することで、文字列全体を一致させることができます。

SELECT regexp_like('1a 2b 14m', '\d+b'); -- true
regexp_replace(文字列, パターン) -> varchar()

文字列 から、正規表現 パターン に一致するすべての部分文字列を削除します。

SELECT regexp_replace('1a 2b 14m', '\d+[ab] '); -- '14m'
regexp_replace(文字列, パターン, 置換文字列) -> varchar()

正規表現 pattern に一致する部分文字列のすべてのインスタンスを、string 内で replacement に置換します。キャプチャグループ は、replacement 内で、番号付きグループの場合は $g、名前付きグループの場合は ${name} を使用して参照できます。ドル記号($)を置換に含めるには、バックスラッシュ(\$)でエスケープします。

SELECT regexp_replace('1a 2b 14m', '(\d+)([ab]) ', '3c$2 '); -- '3ca 3cb 14m'
regexp_replace(string, pattern, function) -> varchar()

正規表現 pattern に一致する部分文字列のすべてのインスタンスを、string 内で function を使用して置換します。ラムダ式 function は、一致ごとに キャプチャグループ を配列として渡して呼び出されます。キャプチャグループの番号は 1 から始まります。全体一致のグループはありません(これが必要な場合は、式全体を括弧で囲みます)。

SELECT regexp_replace('new york', '(\w)(\w*)', x -> upper(x[1]) || lower(x[2])); --'New York'
regexp_split(string, pattern) -> array(varchar)

正規表現 pattern を使用して string を分割し、配列を返します。末尾の空の文字列は保持されます。

SELECT regexp_split('1a 2b 14m', '\s*[a-z]+\s*'); -- [1, 2, 14, ]