文字列関数(正規表現)

これらの文字列関数は、正規表現(「正規表現」と呼ばれることが多い)に一致する操作を実行します。

このトピックの内容:

正規表現関数のリスト

関数

注意

REGEXP

RLIKEのエイリアス。

REGEXP_COUNT

REGEXP_INSTR

REGEXP_LIKE

RLIKEのエイリアス。

REGEXP_REPLACE

REGEXP_SUBSTR

RLIKE

一般的な使用上の注意

これらの注意では、「サブジェクト」は操作対象の文字列を指し、「パターン」は正規表現を指します。

  • 通常、サブジェクトは可変列であり、パターンは定数ですが、これは必須ではありません。正規表現関数のすべての引数は、定数または変数のいずれかにできます。

  • パターンは完全な POSIX ERE (拡張正規表現)構文をサポートします。詳細については、 POSIX 基本および拡張 セクション(ウィキペディア)をご参照ください。

  • パターンは、次のPerlバックスラッシュシーケンスもサポートしています。

    • \d:10進数(0~9)。

    • \D:10進数ではありません。

    • \s:空白文字。

    • \S:空白文字ではありません。

    • \w:「単語」文字(a~z、A~Z、アンダースコア(「_」)、または10進数)。

    • \W:単語の文字ではありません。

    • \b:単語の境界。

    • \B:単語の境界ではありません。

    詳細については、 文字クラス セクション(Wikipedia内)または バックスラッシュシーケンス セクション(Perlドキュメント内)をご参照ください。

    バックスラッシュ文字をエスケープする必要があります( \\\ になります)。詳細については、このトピックの エスケープ文字と警告 をご参照ください。

  • デフォルトでは、 POSIX ワイルドカード文字 . (パターン内)には一致する改行文字 \n (サブジェクト内)は含まれません。

    改行文字にも一致させるには 、 パターン 引数で .(.|\n) に置き換えるか、 パラメーター 引数で s パラメーターを使用します(以下を参照)。

  • すべての正規表現関数はUnicodeをサポートしています。単一のUnicode文字は、その文字の対応するバイナリ表現のバイト長に関係なく、常に1文字としてカウントされます( POSIX メタ文字 . は正確に1つのUnicode文字に一致します)。また、サブジェクトオフセットを取得または返す関数の場合、単一のUnicode文字は1としてカウントされます。

パラメーター

ほとんどの正規表現関数は、最後の入力としてオプションの パラメーター 引数をサポートしています。 パラメーター 引数は、正規表現関数の一致動作に特化する VARCHAR 文字列です。次のパラメーターがサポートされています。

パラメーター

効果

c

大文字と小文字を区別した一致を有効にします。

i

大文字と小文字を区別しない一致を有効にします。

m

複数行モードを有効にします(メタ文字 ^ および $ は、件名の行の先頭と末尾をマークします)。デフォルトでは、複数行モードは無効になっています( ^$ は件名全体の開始と終了を示します)。

e

サブマッチを抽出します。 REGEXP_INSTR および REGEXP_SUBSTR にのみ適用されます。

s

\n と一致する POSIX ワイルドカード文字 . を有効にします。デフォルトでは、ワイルドカード文字の一致は無効になっています。

デフォルトの文字列は単に c であり、次を指定します。

  • 大文字と小文字を区別する一致。

  • 単一行モード。

  • 常にサブマッチ抽出を使用する REGEXP_REPLACE を除き、サブマッチ抽出はありません。

  • POSIX ワイルドカード文字 . は、 \n 改行文字と一致しません。

When specifying multiple parameters, the string is entered with no spaces or delimiters. For example, ims specifies case-insensitive matching in multi-line mode with POSIX wildcard matching.

パラメーター 文字列に ci の両方が含まれている場合、文字列の最後により、関数が大文字と小文字を区別する一致を実行するかどうかが決まります。例えば、 ci は、「i」が文字列の最後にあるため、大文字と小文字を区別する一致を指定します。

バックリファレンス

Snowflakeは、正規表現パターン(形式言語理論では「スクエア」として知られる)のバックリファレンスをサポートしていません。ただし、バックリファレンスは REGEXP_REPLACE 関数の置換文字列でサポートされています。

コーナーケース

ほとんどの正規表現関数では、空のパターン( '')は何も一致せず、空の件名も一致しません。

The exceptions are REGEXP_LIKE and its aliases REGEXP and RLIKE, in which the empty pattern matches the empty subject because the pattern is implicitly anchored at both ends (i.e. '' automatically becomes '^$').

空のグループ(つまり、サブ式 ())は、サブジェクトの開始と終了を含む文字間のスペースに一致します。

エスケープ文字と警告

POSIX 規格で義務付けられているように、単一のバックスラッシュ文字 \ を使用して、メタ文字(例: \* または \?)をエスケープします。バックスラッシュ文字は、いわゆるバックスラッシュシーケンス(例: \w)にも使用されます。

バックスラッシュ文字はさらに、制御文字を SQL 文字列に挿入するために使用されます(例: \n で改行を挿入)。その結果、単一のバックスラッシュ文字を SQL 文字列リテラルに挿入するには、バックスラッシュ文字をエスケープする必要があります( \\\ になる)。

例えば、バックリファレンス \1REGEXP_LIKE の置換文字列リテラルに挿入するには、 \\\\1 を使用する必要がある場合があります。