すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:正規表現関数

最終更新日:Jun 04, 2026

SLS SQL および SPL クエリにおける正規表現関数の構文と使用方法について説明します。

正規表現関数

SLS では以下の正規表現関数がサポートされています。すべての正規表現は RE2 構文 を使用します。

重要 分析文中で文字列を使用する場合は、必ず一重引用符 ('') で囲んでください。囲まれていない文字列または二重引用符 ("") で囲まれた文字列は、フィールド名またはカラム名を示します。たとえば、'status' は status 文字列を示し、status または "status" は status ログフィールドを示します。

関数

構文

説明

SQL

SPL

regexp_extract_all 関数

regexp_extract_all(x, 正規表現)

正規表現に一致するすべての部分文字列の配列を返します。

×

regexp_extract_all(x, 正規表現, n)

正規表現のすべての一致箇所から、指定されたキャプチャグループの部分文字列の配列を返します。

×

regexp_extract 関数

regexp_extract(x, 正規表現)

正規表現に一致する最初の部分文字列を返します。

regexp_extract(x, 正規表現, n)

正規表現に一致する最初の部分文字列から、n 番目のキャプチャグループの内容を返します。

regexp_extract_bool 関数

regexp_extract_bool(x, 正規表現)

最初に一致した部分文字列を BOOLEAN 型に変換します。変換に失敗した場合は null を返します。

×

regexp_extract_bool(x, 正規表現, n)

最初の一致箇所の指定されたキャプチャグループの内容を BOOLEAN 型に変換します。変換に失敗した場合は null を返します。

×

regexp_extract_long 関数

regexp_extract_long(x, 正規表現)

最初に一致した部分文字列を BIGINT 型に変換します。変換に失敗した場合は null を返します。

×

regexp_extract_long(x, 正規表現, n)

最初の一致箇所の指定されたキャプチャグループの内容を BIGINT 型に変換します。変換に失敗した場合は null を返します。

×

regexp_extract_double 関数

regexp_extract_double(x, 正規表現)

最初に一致した部分文字列を DOUBLE 型に変換します。変換に失敗した場合は null を返します。

×

regexp_extract_double(x, 正規表現, n)

最初の一致箇所の指定されたキャプチャグループの内容を DOUBLE 型に変換します。変換に失敗した場合は null を返します。

×

regexp_extract_map 関数

regexp_extract_map(x, 正規表現, keys)

指定されたキーと対応するキャプチャグループの内容をペアにしてマップを作成します。

×

regexp_extract_map(x, 正規表現)

2 つのキャプチャグループを持つ正規表現からマップを作成します。最初のグループがキーを定義し、2 番目のグループが値を定義します。

×

regexp_like 関数

regexp_like(x, 正規表現)

文字列が正規表現に一致するかどうかをチェックします。

regexp_replace 関数

regexp_replace(x, 正規表現)

正規表現に一致するすべての部分文字列を削除します。

regexp_replace(x, 正規表現, 置換文字列)

正規表現に一致するすべての部分文字列を置換文字列に置き換えます。

regexp_split 関数

regexp_split(x, 正規表現)

正規表現をデリミタとして文字列を分割し、結果の部分文字列を配列で返します。

×

説明

正規表現関数で一重引用符 (') を抽出するには、正規表現内で '' と記述してエスケープしてください。regexp_extract 関数の例 3 でこの方法を紹介しています。

regexp_extract_all 関数

ソース文字列から正規表現に一致するすべての部分文字列を抽出します。

構文

  • ソース文字列から正規表現に一致するすべての部分文字列の配列を返します。

    regexp_extract_all(x, 正規表現)
  • 正規表現内の指定されたキャプチャグループに一致する部分文字列の配列を返します。

    regexp_extract_all(x, 正規表現, n)

パラメーター

パラメーター

説明

x

ソース文字列。VARCHAR 型である必要があります。

正規表現

正規表現。パラメーター n を指定する場合は、キャプチャグループを含む必要があります。たとえば、(\d)(\d)(\d) は 3 つのキャプチャグループを指定します。

n

キャプチャグループのインデックス。1 以上の整数である必要があります。

戻り値

ARRAY

使用例

  • 例 1:server_protocol フィールドの値からすべての数字を抽出します。

    • サンプルフィールド

      server_protocol:HTTP/2.0
    • クエリと分析文 (テスト)

      *| SELECT regexp_extract_all(server_protocol, '\d+')
    • クエリと分析結果:HTTP/2.0 から抽出されたすべての数字の部分文字列が _col0 カラムに ["2","0"] として返されます。

  • 例 2:http_user_agent フィールドの値から 'Chrome' 部分文字列を抽出し、Chrome ブラウザによるリクエスト数をカウントします。

    • サンプルフィールド

      http_user_agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.803.0 Safari/535.1
    • クエリと分析文 (テスト)

      *| SELECT regexp_extract_all(http_user_agent, '(Chrome)',1) AS Chrome, count(*) AS count GROUP BY Chrome
    • クエリと分析結果:Chrome カラムに ["Chrome"]count カラムに 103440 が返されます。

regexp_extract 関数

ソース文字列から正規表現に一致する最初の部分文字列を抽出します。

構文

  • 正規表現に一致する最初の部分文字列を返します。

    regexp_extract(x, 正規表現)
  • n 番目のキャプチャグループに一致する部分文字列を返します。

    regexp_extract(x, 正規表現, n)

パラメーター

パラメーター

説明

x

ソース文字列。VARCHAR 型である必要があります。

正規表現

正規表現。キャプチャグループを含めることができます。たとえば、(\d)(\d)(\d) は 3 つのキャプチャグループを含みます。

n

キャプチャグループのインデックス (1 起点)。正の整数である必要があります。

戻り値

VARCHAR 文字列を返します。

使用例

SQL

  • 例 1:server_protocol フィールドから最初の数字を抽出します。

    • サンプルフィールド

      server_protocol:HTTP/2.0
    • クエリ文 (テスト)

      *|SELECT regexp_extract(server_protocol, '\d+')
    • クエリは _col0 という名前のカラムを返し、その値は 2 です。

  • 例 2:request_uri フィールドからファイル部分を抽出し、各ファイルへのアクセスリクエスト数をカウントします。

    • サンプルフィールド

      request_uri:/request/path-3/file-5
    • クエリ文 (テスト)

      * | SELECT regexp_extract(request_uri, '.*\/(file.*)', 1) AS file, count(*) AS count GROUP BY file
    • サンプル結果:file カラムは file-5count カラムは 17127 です。

  • 例 3:message フィールドから一重引用符 (') と数字を抽出します。

    • サンプルフィールド

      message:error'1232
    • クエリ文

      * | SELECT regexp_extract(message, '''\d+') 
      説明

      一重引用符 (') に一致させるには、正規表現文字列内で '' と記述してエスケープする必要があります。

    • 結果は '1232 です。

SPL

  • 例 1:server_protocol フィールドから最初の数字を抽出します。

    • サンプルフィールド

server_protocol:HTTP/2.0
  • クエリ文

* | extend a = regexp_extract(server_protocol, '\d+')
  • 結果

a:  2
  • 例 2:request_uri フィールドからファイル部分を抽出します。

    • サンプルフィールド

request_uri:/request/path-3/file-5
  • クエリ文

* | extend a = regexp_extract(request_uri, '.*\/(file.*)',1)
  • 結果

結果は a: file-5 です。

  • 例 3:message フィールドから一重引用符 (') と数字を抽出します。

    • サンプルフィールド

message:error'1232
  • クエリ文

* | extend a = regexp_extract(message, '''\d+') 

注記

一重引用符 (') に一致させるには、正規表現文字列内で '' と記述してエスケープする必要があります。

  • 結果

1  12-19 10:39:33
   a: '1232

regexp_extract_bool 関数

正規表現に一致する部分文字列を抽出し、BOOLEAN 型に変換します。変換は部分文字列が "true" または "false"(大文字小文字を区別しない)の場合にのみ成功し、それ以外の場合は null を返します。

構文

  • ソース文字列から正規表現に一致する部分文字列を抽出し、BOOLEAN 型に変換します。変換に失敗した場合は null を返します。

    regexp_extract_bool(x, 正規表現)
  • ソース文字列から正規表現の指定されたキャプチャグループに一致する部分文字列を抽出し、ブール型に変換します。変換に失敗した場合は null が返されます。

    regexp_extract_bool(x, 正規表現, n)

パラメーター

パラメーター

説明

x

ソース文字列。このパラメーターは VARCHAR 型です。

正規表現

キャプチャグループを含む正規表現。たとえば、(\d)(\d)(\d) は 3 つのキャプチャグループを指定します。

n

抽出するキャプチャグループのインデックス。このパラメーターは 1 起点の整数です。

戻り値の型

BOOLEAN 型。

使用例

  • フィールド値からブール値を抽出します。

    • サンプルフィールド

      false 
    • クエリと分析文 (テスト)

      *| select regexp_extract_bool('false', '[a-zA-Z]+')
    • クエリと分析結果

      1 行のデータを持つ _col0 カラムを返します。値は false です。

regexp_extract_long 関数

正規表現に一致する部分文字列を抽出し、BIGINT 型に変換します。変換に失敗した場合は null を返します。

構文

  • 正規表現の最初のキャプチャグループに一致する部分文字列を抽出して変換します。

    regexp_extract_long(x, 正規表現)
  • 指定されたキャプチャグループに一致する部分文字列を抽出して変換します。

    regexp_extract_long(x, 正規表現, n)

パラメーター

パラメーター

説明

x

ソース文字列。このパラメーターは VARCHAR 型です。

正規表現

キャプチャグループを含む正規表現。たとえば、(\d)(\d)(\d) は 3 つのキャプチャグループを含みます。

n

抽出するキャプチャグループのインデックス。インデックスは 1 起点の整数です。

戻り値の型

BIGINT

使用例

  • time フィールドから数値を抽出します。

    • サンプルフィールド

      time:19/Dec/2024:06:16:06
    • クエリ文 (テスト)

      *|SELECT regexp_extract_long(time, '(\d{2})/', 1) 
    • クエリと分析結果

      _col0 という名前のカラムを返し、2 行とも値は 19 です。

regexp_extract_double 関数

正規表現に一致する部分文字列を抽出し、DOUBLE 型に変換します。変換に失敗した場合は null を返します。

構文

  • 最初に一致した部分文字列を抽出し、double 型に変換します。変換に失敗した場合は null が返されます。

    regexp_extract_double(x, 正規表現)
  • 指定されたキャプチャグループの部分文字列を抽出し、double 型に変換します。変換に失敗した場合は null が返されます。

    regexp_extract_double(x, 正規表現, n)

パラメーター

パラメーター

説明

x

ソース文字列。VARCHAR 型である必要があります。

正規表現

キャプチャグループを含む正規表現。たとえば、(\d)(\d)(\d) は 3 つのキャプチャグループを指定します。

n

抽出するキャプチャグループのインデックス。インデックスは 1 から始まる整数です。

戻り値の型

double

使用例

  • server_protocol フィールドから浮動小数点数を抽出します。

    • サンプルフィールド

      server_protocol:HTTP/1.1
    • クエリと分析文 (テスト)

      *|SELECT regexp_extract_double(server_protocol, '\d+\.\d+') 
    • クエリと分析結果

      クエリと分析は _col0 という名前のカラムを返します。このカラムには 2 行あり、それぞれの値は 1.1 です。

regexp_extract_map 関数

正規表現のキャプチャグループに一致する部分文字列を抽出し、キーと値のペアのマップとして返します。

構文

  • 指定されたキーと対応するキャプチャグループに一致する部分文字列をペアにしてマップを作成します。

regexp_extract_map(x, 正規表現, keys)
  • 2 つのキャプチャグループを持つ正規表現を使用して、それぞれキーと値に一致するマップを作成します。

regexp_extract_map(x, 正規表現)

パラメーター

パラメーター

説明

x

検索対象のソース文字列。データ型は VARCHAR です。

正規表現

キャプチャグループを含む正規表現。たとえば、(\d)(\d)(\d) は 3 つのキャプチャグループを指定します。

keys

キャプチャされた部分文字列のキー名。データ型は ARRAY(VARCHAR) です。キーの数は正規表現内のキャプチャグループの数と一致している必要があります。

戻り値の型

MAP(VARCHAR, VARCHAR)

使用例

  • 例 1:server_protocol フィールドからプロトコル名とバージョンを抽出します。

    • サンプルフィールド

      server_protocol: 'HTTP/2.0'
    • クエリ文

      select regexp_extract_map(server_protocol, '(\w+)/([\d\.]+)', array['name', 'version']) as protocol
    • クエリと分析結果

      クエリは protocol カラムに次のマップを返します:{"name":"HTTP","version":"2.0"}

  • 例 2:content フィールドからすべてのキーと値のペアを抽出します。

    • サンプルフィールド

      content: 'verb="GET" URI="/healthz" latency="45.911µs" userAgent="kube-probe/1.30+"'
    • クエリ文

      select regexp_extract_map(content, '(\w+)="([^"]*)"') as args
    • 出力データ

      {"latency":"45.911µs","verb":"GET","userAgent":"kube-probe/1.30+","URI":"/healthz"}

regexp_like 関数

文字列が正規表現に一致するかどうかをチェックします。

構文

regexp_like(x, 正規表現)

パラメーター

パラメーター

説明

x

ソース文字列。VARCHAR 型である必要があります。

正規表現

一致させる正規表現パターン。

戻り値の型

BOOLEAN

使用例

SQL

server_protocol フィールドに数字が含まれているかどうかを確認してください。

  • サンプルフィールド

    server_protocol:HTTP/2.0
  • クエリと分析文 (テスト)

    *| select regexp_like(server_protocol, '\d+')
  • クエリは 2 行を返します。両方の値は true です。これは、server_protocol フィールドの値が \d+ 正規表現(数字を含む)に一致することを示しています。

SPL

server_protocol フィールドに数字が含まれているかどうかを確認します。

  • サンプルフィールド

server_protocol:HTTP/2.0
  • クエリと分析文

* |extend a = regexp_like(server_protocol, '\d+')
  • クエリと分析結果

1  12-18 19:34:20  1.2.3.4
        a: true

regexp_replace 関数

正規表現に一致する部分文字列を削除または置き換えます。

構文

  • ソース文字列から正規表現に一致するすべての部分文字列を削除します。

    regexp_replace(x, 正規表現)
  • 正規表現に一致するすべての部分文字列を置換文字列に置き換えます。

    regexp_replace(x, 正規表現, 置換文字列)

パラメーター

パラメーター

説明

x

検索対象のソース文字列。このパラメーターは VARCHAR 型である必要があります。

正規表現

正規表現パターン。

置換文字列

置換文字列。省略された場合、一致した部分文字列は削除されます。

戻り値の型

VARCHAR

使用例

SQL

  • 例 1:region フィールドで、cn で始まるリージョン名を China に置き換え、中国からのリクエスト数をカウントします。

    • サンプルフィールド

      region:cn-shanghai
    • クエリと分析文 (テスト)

      * | select regexp_replace(region, 'cn.*','China') AS region, count(*) AS count GROUP BY region
    • クエリと分析結果:クエリは 1 行を返し、region カラムは Chinacount カラムは 168871 です。

  • 例 2:server_protocol フィールドの値からバージョン番号部分を削除し、各通信プロトコルのリクエスト数をカウントします。

    • サンプルフィールド

      server_protocol:HTTP/2.0
    • クエリと分析文 (テスト)

      *| select regexp_replace(server_protocol, '.\d+') AS server_protocol, count(*) AS count GROUP BY server_protocol
    • クエリと分析結果:クエリは 1 行を返し、server_protocolHTTPcount168871 です。

SPL

  • 例 1:region フィールドの値で 'cn' で始まるすべてのリージョン名を China に置き換えます。

    • サンプルフィールド

region:cn-shanghai
  • クエリと分析文

* | extend a = regexp_replace(region, 'cn.*','China')
  • クエリと分析結果

    1  12-18 19:34:20  1.2.3.4
       a: China
  • 例 2:server_protocol フィールドの値からバージョン番号を削除します。

    • サンプルフィールド

server_protocol:HTTP/2.0
* | extend a = regexp_replace(server_protocol, '.\d+')
  • クエリと分析結果

クエリは、タイムスタンプ、宛先 IP アドレス 1.2.3.4、およびバージョン番号が削除された server_protocol フィールドを含むログエントリを返します。

regexp_split 関数

正規表現をデリミタとしてソース文字列を分割し、部分文字列の配列を返します。

構文

regexp_split(x, 正規表現)

パラメーター

パラメーター

説明

x

ソース文字列。データ型は VARCHAR です。

正規表現

デリミタとして使用する正規表現パターン。

戻り値の型

array

使用例

スラッシュ (/) を使用して request_uri フィールドの値を分割します。

  • サンプルフィールド

    request_uri:/request/path-0/file-7
  • クエリと分析文 (テスト)

    * | SELECT regexp_split(request_uri,'/')
  • クエリと分析結果は ["","request","path-0","file-7"] です。