正規表現関数¶
すべての正規表現関数は、Java パターン 構文を使用しますが、いくつかの注目すべき例外があります。
複数行モード(
(?m)
フラグで有効化)を使用する場合、\n
のみが行終端記号として認識されます。さらに、(?d)
フラグはサポートされておらず、使用しないでください。大文字と小文字を区別しないマッチング(
(?i)
フラグで有効化)は、常にUnicodeを認識した方法で実行されます。ただし、コンテキスト依存およびロケール依存のマッチングはサポートされていません。さらに、(?u)
フラグはサポートされておらず、使用しないでください。サロゲートペアはサポートされていません。たとえば、
\uD800\uDC00
はU+10000
として扱われず、\x{10000}
として指定する必要があります。境界(
\b
)は、基底文字のない非スペーシングマークに対して正しく処理されません。\Q
と\E
は、文字クラス([A-Z123]
など)ではサポートされておらず、リテラルとして扱われます。Unicode文字クラス(
\p{prop}
)は、以下の違いを伴ってサポートされています。名前のすべての下線は削除する必要があります。たとえば、
Old_Italic
の代わりにOldItalic
を使用します。スクリプトは、
Is
、script=
、またはsc=
接頭辞なしで直接指定する必要があります。例:\p{Hiragana}
ブロックは、
In
接頭辞を付けて指定する必要があります。block=
およびblk=
接頭辞はサポートされていません。例:\p{InMongolian}
カテゴリは、
Is
、general_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, ]