次の方法で共有


正規表現

適用対象: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric 内の SQL データベース

この記事では、SQL Server の正規表現について説明します。

正規表現 (正規表現) は、テキストの検索パターンを定義する文字のシーケンスです。 正規表現は、パターン マッチング、データ検証、データ変換、クエリなど、さまざまなタスクに一般的に使用されます。 複雑なデータ操作を検索、操作、処理するための柔軟で効率的な方法が提供されます。

Note

正規表現は、SQL Server 2025 または Always-up-to-date更新ポリシーを使用して Azure SQL Managed Instance で使用できます。

正規表現のこの実装は、 RE2 正規表現ライブラリに基づいています。 詳細については、「 RE2 正規表現構文」を参照してください。

サポートされている正規表現関数:

Function Description
REGEXP_LIKE テキスト入力が正規表現パターンと一致するかどうかを示す、ブール値を返します。
REGEXP_REPLACE 正規表現パターンの出現が見つかった箇所で置換文字列に置き換えられた、変更済みのソース文字列を返します。
REGEXP_SUBSTR 正規表現パターンに基づいて文字列の一部を抽出します。

正規表現パターンと一致する部分文字列の N 番目の出現箇所を返します。
REGEXP_INSTR 指定されたオプションに応じて、一致する部分文字列の開始位置または終了位置を返します。
REGEXP_COUNT 文字列内で正規表現パターンが発生した回数のカウントを返します。
REGEXP_MATCHES 正規表現パターンと一致するキャプチャされた部分文字列のテーブルを文字列に返します。 一致するものが見つからない場合、関数は行を返しません。
REGEXP_SPLIT_TO_TABLE 正規表現パターンで区切られた、分割された文字列のテーブルを返します。 パターンと一致するものがない場合、この関数は文字列を返します。

正規表現は、特別な意味と関数を持つリテラル文字とメタ文字で構成できます。

基本的な正規表現は、1 つのリテラル文字です。 文字はメタ文字を除き、それ自体と一致します。 メタ文字には、 *+?()、または |が含まれます。 メタ文字を一致させるには、バックスラッシュでエスケープします。 たとえば、 \* はリテラルアスタリスク (*) 文字と一致します。

2 つの正規表現を変更または連結して新しい正規表現を形成できます。e1s に一致し、e2t と一致する場合、e1 | e2s または t に一致し、e1 e2st に一致します。

メタ文字 *+、および ? は繰り返し演算子です。 e1* は 0 個以上の (異なる可能性がある) 文字列のシーケンスに一致し、それぞれが e1 に一致し、e1 + は 1 つ以上に一致します。 e1? は 0 または 1 に一致します。

演算子の優先順位 (最も弱いものから最も強いバインディングまで) は次のとおりです。 - Alternation - 連結 - 繰り返し演算子

明示的なかっこを使用すると、算術式のように異なる意味を強制できます。 いくつかの例: ab|cd(ab)|(cd) に相当し、 aba(b)と同等です。

RE2 で受け入れられる正規表現構文の詳細については、次を参照してください。
RE2 正規表現の構文。 このページには、PCRE、Perl、Vim で受け入れられるいくつかの構文も一覧表示されます。

受け入れ可能な正規表現文字

単一文字式

単一文字式の種類 Examples
任意の文字 (場合によっては改行を含む) (s=true) .
文字クラス [xyz]
否定の文字クラス [^xyz]
Perl 文字クラス \d
否定の Perl 文字クラス \D
ASCII 文字クラス [[:alpha:]]
否定の ASCII 文字クラス [[:^alpha:]]
Unicode 文字クラス (1 文字の名前) \pN
Unicode 文字クラス \p{Greek}
否定の Unicode 文字クラス (1 文字の名前) \PN
否定の Unicode 文字クラス \P{Greek}
複合 材料 Description
xy x の後に y が続く
x | y x または y (x を優先)
繰り返し Description
x* 0 個以上の x、できるだけ多くが望ましい
x+ 1つ以上のxを、できればさらに多く求めます。
x? 0 または 1 x、1 を優先
x{n,m} n または n+1 または ...または m x、より多くを好む
x{n,} xがn以上の場合、より多い方を好む
x{n} 正確に n x
x*? 0 個以上の x、より少ない方が望ましい
x+? 1 つ以上の x、より少ない方を好む
x?? 0 または 1 x、0 を優先
x{n,m}? n または n+1 または ...または m x、より少ない方が望ましい
x{n,}? n 以上の x、より少ない方を好む
x{n}? 正確に n x

Note

カウントフォーム x{n,m}x{n,}x{n} は、最小または最大の繰り返し数が 1,000 を超えるフォームを拒否します。 無制限の繰り返しは、この制限の対象になりません。

Perl 文字クラス

次の表に、現在サポートされている Perl 文字クラスを示します。

Perl 文字クラス (すべて ASCII のみ) Description
\d 数字 ( [0-9])
\D 数字以外 ( [^0-9])
\s 空白 ( [\t\n\f\r ])
\S 空白文字以外 ( [^\t\n\f\r ])
\w ワード文字 ( [0-9A-Za-z_])
\W ワード文字以外 ( [^0-9A-Za-z_])

ASCII 文字クラス

次の表に、現在サポートされている ASCII 文字クラスを示します。

ASCII 文字クラス Description
[[:alnum:]] 英数字 ( [0-9A-Za-z])
[[:alpha:]] 英字 ( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] 空白 ( [\t ])
[[:cntrl:]] コントロール ( [\x00-\x1F\x7F])
[[:digit:]] 数字 ( [0-9])
[[:graph:]] グラフィカル ( [!-~] または [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] 小文字 ( [a-z])
[[:print:]] 印刷可能 ( [ -~] または [ [:graph:]])
[[:punct:]] 句読点 ( [!-/:-@[-\``{-~])
[[:space:]] 空白 ( [\t\n\v\f\r ])
[[:upper:]] 大文字 ( [A-Z])
[[:word:]] ワード文字 ( [0-9A-Za-z_])
[[:xdigit:]] 16 進数の数字 ( [0-9A-Fa-f])

リテラル文字

  • Letters
  • Numbers
  • Symbols

空の文字列

空の文字列 Description
^ テキストまたは行の先頭 (m=true)
$ テキストの末尾 (\zではなく、\Zなど) または行 (m=true)
\A テキストの先頭
\b ASCII 単語の境界(片側に\wがあり、もう一方に\W\A、または\zがあります)
\B ASCIIのワード境界に該当しません
\z テキストの末尾

Groupings

パターンのキャプチャ グループ (部分式) を次に示します。

Grouping Description
(re) 番号付きキャプチャグループ(サブマッチ)
(?P<name>re) 名前付きおよび番号付きのキャプチャグループ(サブマッチ)
(?:re) 非キャプチャ グループ
(?<flags>) 現在のグループ内で <flags> を設定します。非キャプチャ
(?<flags>:re) <flags>中にreを設定する;非キャプチャ グループ化

Flags

フラグを使用して式の動作を変更します。 例えば次が挙げられます。

Flag Description
i 大文字と小文字を区別しない (既定の false)
m 複数行モード: 開始/終了テキストに加え、^ および $ は行の開始/終了にも一致します(既定の false
s .\nに一致させる (既定はfalse)
c 大文字と小文字が区別されます (既定の設定 true)

この実装では、RE2 に続く正規表現の POSIX 標準がサポートされ、ほとんどの最新の正規表現エンジンやツールと互換性のある正規表現構文の PCRE/PCRE2 フレーバーがサポートされています。 POSIX、ANSI、Perl、PCRE など、さまざまな種類の正規表現があり、構文と機能が異なります。 サポートされているコンストラクトと基になる正規表現エンジンの動作の詳細については、 正規表現ライブラリである RE2 を参照してください。

Note

SQL Server での正規表現の照合では、言語比較に対して SQL 照合順序が優先されません。 照合は照合順序規則ではなくパターンと Unicode 文字プロパティに基づいているので、この動作は設計上、ほとんどの正規表現エンジンと一致します。 その結果、LIKE などの他の文字列比較関数 (特に言語固有の照合順序を持つインデックス付き列) と比較した場合の動作の違いにつながる可能性があります。

Requirements

  • Azure Data Studio、SQL Server Management Studio、Visual Studio Code などの SQL クライアント ツール。
  • SQL 構文とクエリに関する基本的な知識。
  • 正規表現の構文と概念の基本的な理解。

FAQ

正規表現を使用した場合のパフォーマンスへの影響は何ですか?

正規表現クエリは、正規表現パターンの複雑さ、テキスト データのサイズ、関係する行数に応じてパフォーマンスに影響を与える可能性があります。 実行プランと統計を使用して、正規表現クエリのパフォーマンスを監視および最適化できます。

制限事項

現在、次の項目はサポートされていません。

  • 次の組み込み関数では、の LOB データ型 (varchar(max) または string_expressions) がサポートされています。
    • REGEXP_LIKE
    • REGEXP_COUNT
    • REGEXP_INSTR

ただし、このサポートは最大 2 MB の入力サイズに制限されています。

  • LOB データ型は、次の正規表現関数ではサポートされていません。

    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • 正規表現関数は、ネイティブ コンパイル ストアド プロシージャではサポートされていません。