このトピックでは、正規表現関数の基本的な構文と例について説明します。
正規表現関数の概要
Simple Log Service は、次の正規表現関数をサポートしています。 正規表現は RE2 構文 を使用します。
関数 | 構文 | 説明 | SQL サポート | SPL サポート |
regexp_extract_all(x, 正規表現) | ソース文字列から正規表現に一致する部分文字列を抽出し、部分文字列の配列を返します。 | √ | × | |
regexp_extract_all(x, 正規表現, n) | ソース文字列から正規表現に一致する部分文字列を抽出し、キャプチャグループに一致する部分文字列の配列を返します。 | √ | × | |
regexp_extract(x, 正規表現) | ソース文字列から正規表現に一致する最初の部分文字列を抽出して返します。 | √ | √ | |
regexp_extract(x, 正規表現, n) | ソース文字列から正規表現に一致する部分文字列を抽出し、n 番目のキャプチャグループに一致する部分文字列を返します。 | √ | √ | |
regexp_extract_bool(x, 正規表現) | ソース文字列から正規表現に一致する部分文字列を抽出して返し、その部分文字列を BOOLEAN 型に変換します。 変換に失敗した場合は、 | √ | × | |
regexp_extract_bool(x, 正規表現, n) | ソース文字列から正規表現に一致する部分文字列を抽出し、キャプチャグループに一致する部分文字列を返して、その部分文字列を BOOLEAN 型に変換します。 変換に失敗した場合は、 | √ | × | |
regexp_extract_long(x, 正規表現) | ソース文字列から正規表現に一致する部分文字列を抽出して返し、その部分文字列を BIGINT 型に変換します。 変換に失敗した場合は、 | √ | × | |
regexp_extract_long(x, 正規表現, n) | ソース文字列から正規表現に一致する部分文字列を抽出し、キャプチャグループに一致する部分文字列を返して、その部分文字列を BIGINT 型に変換します。 変換に失敗した場合は、 | √ | × | |
regexp_extract_double(x, 正規表現) | ソース文字列から正規表現に一致する最初の部分文字列を抽出して返し、その部分文字列を DOUBLE 型に変換します。 変換に失敗した場合は、 | √ | × | |
regexp_extract_double(x, 正規表現, n) | ソース文字列から正規表現に一致する部分文字列を抽出し、キャプチャグループに一致する部分文字列を返して、その部分文字列を DOUBLE 型に変換します。 変換に失敗した場合は、 | √ | × | |
regexp_extract_map(x, 正規表現, keys) | キー情報を指定します。 キャプチャグループに一致する部分文字列が値として使用されます。 | √ | × | |
regexp_extract_map(x, 正規表現) | 正規表現には、キーと値に一致する 2 つのキャプチャグループが含まれます。 | √ | × | |
regexp_like(x, 正規表現) | ソース文字列が正規表現に一致するかどうかを確認します。 | √ | √ | |
regexp_replace(x, 正規表現) | ソース文字列から正規表現に一致する部分文字列を削除し、残りの部分文字列を返します。 | √ | √ | |
regexp_replace(x, 正規表現, 置換文字列) | ソース文字列内の正規表現に一致する部分文字列を置き換え、新しい文字列を返します。 | √ | √ | |
regexp_split(x, 正規表現) | 正規表現を使用してソース文字列を分割し、部分文字列の配列を返します。 | √ | × |
正規表現関数を使用して文字列から単一引用符 (') を抽出する場合、正規表現にもう 1 つ単一引用符 (') を追加する必要があります。 詳細については、「regexp_extract 関数の例 3」をご参照ください。
regexp_extract_all 関数
regexp_extract_all 関数は、ソース文字列から正規表現に一致する部分文字列を抽出します。
構文
ソース文字列から正規表現に一致するすべての部分文字列を抽出し、配列で返します。
regexp_extract_all(x, regular expression)ソース文字列から正規表現に一致する部分文字列を抽出し、特定のキャプチャグループに一致する部分文字列の配列を返します。
regexp_extract_all(x, regular expression, n)
パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
正規表現 | キャプチャグループを含む正規表現。 たとえば、 |
n | n 番目のキャプチャグループ。 n は 1 から始まる整数です。 |
戻り値の型
配列型。
例
例 1:
server_protocolフィールドの値からすべての数字を抽出します。フィールドのサンプル
server_protocol:HTTP/2.0クエリ文 (テスト)
*| SELECT regexp_extract_all(server_protocol, '\d+')クエリと分析結果

例 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クエリと分析結果

regexp_extract 関数
regexp_extract 関数は、ソース文字列から正規表現に一致する部分文字列を抽出します。
構文
ソース文字列から正規表現に一致する最初の部分文字列を抽出して返します。
regexp_extract(x, regular expression)ソース文字列から正規表現に一致する部分文字列を抽出し、n 番目のキャプチャグループに一致する部分文字列を返します。
regexp_extract(x, regular expression, n)
パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
正規表現 | キャプチャグループを含む正規表現。 たとえば、 |
n | n 番目のキャプチャグループ。 n は 1 から始まる整数です。 |
戻り値の型
VARCHAR
例
SQL
例 1:
server_protocolフィールドの値から最初の数字を抽出します。フィールドのサンプル
server_protocol:HTTP/2.0クエリ文 (テスト)
*|SELECT regexp_extract(server_protocol, '\d+')クエリと分析結果

例 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クエリと分析結果

例 3:
messageフィールドの値から単一引用符 (') と数字を抽出します。フィールドのサンプル
message:error'1232クエリ文
* | SELECT regexp_extract(message, '''\d+')説明正規表現関数を使用して文字列から単一引用符 (') を抽出する場合、正規表現にもう 1 つ単一引用符 (') を追加する必要があります。
クエリと分析結果

SPL
例 1: server_protocol フィールドの値から最初の数字を抽出します。
フィールドのサンプル
server_protocol:HTTP/2.0クエリ文
* | extend a = regexp_extract(server_protocol, '\d+')クエリと分析結果

例 2:
request_uriフィールドの値からファイル部分を抽出します。フィールドのサンプル
request_uri:/request/path-3/file-5クエリ文
* | extend a = regexp_extract(request_uri, '.*\/(file.*)',1)クエリと分析結果

例 3:
messageフィールドの値から単一引用符 (') と数字を抽出します。フィールドのサンプル
message:error'1232クエリ文
* | extend a = regexp_extract(message, '''\d+') 注
正規表現関数を使用して文字列から単一引用符 (') を抽出する場合、正規表現にもう 1 つ単一引用符 (') を追加する必要があります。
クエリと分析結果

regexp_extract_bool 関数
regexp_extract_bool 関数は、ソース文字列から正規表現に一致する部分文字列を抽出し、その部分文字列を BOOLEAN 型に変換します。 変換に失敗した場合は、null が返されます。 変換が成功するのは、部分文字列が "true" または "false" の場合のみです。 これらの値では大文字と小文字は区別されません。
構文
ソース文字列から正規表現に一致する部分文字列を抽出し、BOOLEAN 型に変換します。 変換に失敗した場合は、
nullが返されます。regexp_extract_bool(x, regular expression)ソース文字列から正規表現に一致する部分文字列を抽出し、指定されたキャプチャグループに一致する部分文字列を返して、BOOLEAN 型に変換します。 変換に失敗した場合は、
nullが返されます。regexp_extract_bool(x, regular expression, n)
パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
正規表現 | キャプチャグループを含む正規表現。 たとえば、 |
n | n 番目のキャプチャグループ。 n は 1 から始まる整数です。 |
戻り値の型
BOOLEAN
例
フィールド値からブール値を抽出します。
フィールドのサンプル
falseクエリ文 (テスト)
*| select regexp_extract_bool('false', '[a-zA-Z]+')クエリと分析結果

regexp_extract_long 関数
regexp_extract_long 関数は、ソース文字列から正規表現に一致する部分文字列を抽出し、その部分文字列を BIGINT 型に変換します。 変換に失敗した場合は、null が返されます。
構文
ソース文字列から正規表現に一致する部分文字列を抽出し、BIGINT 型に変換します。 変換に失敗した場合は、
nullが返されます。regexp_extract_long(x, regular expression)ソース文字列から正規表現に一致する部分文字列を抽出し、指定されたキャプチャグループに一致する部分文字列を返して、BIGINT 型に変換します。 変換に失敗した場合は、
nullが返されます。regexp_extract_long(x, regular expression, n)
パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
正規表現 | キャプチャグループを含む正規表現。 たとえば、 |
n | n 番目のキャプチャグループ。 n は 1 から始まる整数です。 |
戻り値の型
BIGINT
例
timeフィールドから数値を抽出します。フィールドのサンプル
time:19/Dec/2024:06:16:06クエリ文 (テスト)
*|SELECT regexp_extract_long(time, '(\d{2})/', 1)クエリと分析結果

regexp_extract_double 関数
regexp_extract_double 関数は、ソース文字列から正規表現に一致する部分文字列を抽出し、その部分文字列を DOUBLE 型に変換します。 変換に失敗した場合は、null が返されます。
構文
ソース文字列から正規表現に一致する部分文字列を抽出し、DOUBLE 型に変換します。 変換に失敗した場合は、
nullが返されます。regexp_extract_double(x, regular expression)ソース文字列から正規表現に一致する部分文字列を抽出し、指定されたキャプチャグループに一致する部分文字列を返して、DOUBLE 型に変換します。 変換に失敗した場合は、
nullが返されます。regexp_extract_double(x, regular expression, n)
パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
正規表現 | キャプチャグループを含む正規表現。 たとえば、 |
n | n 番目のキャプチャグループ。 n は 1 から始まる整数です。 |
戻り値の型
Double データ型。
例
server_protocolフィールドから数値を抽出します。フィールドのサンプル
server_protocol:HTTP/1.1クエリ文 (テスト)
*|SELECT regexp_extract_double(server_protocol, '\d+')クエリと分析結果

regexp_extract_map 関数
regexp_extract_map 関数は、ソース文字列から正規表現内のすべてのキャプチャグループに一致する部分文字列を抽出します。
構文
キー情報を指定します。 キャプチャグループに一致する部分文字列が値として使用されます。
regexp_extract_map(x, regular expression, keys)正規表現には、キーと値に一致する 2 つのキャプチャグループが含まれます。
regexp_extract_map(x, regular expression)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
regular expression | キャプチャグループを含む正規表現。 たとえば、 |
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クエリと分析結果

例 2: content フィールドからすべてのキーと値のペアを抽出します。
フィールドのサンプル
content: 'verb="GET" URI="/healthz" latency="45.911µs" userAgent="kube-probe/1.30+"'クエリ文
select regexp_extract_map(content, '(\w+)="([^"]*)"') as args出力データ

regexp_like 関数
regexp_like 関数は、ソース文字列が正規表現に一致するかどうかを確認します。
構文
regexp_like(x, regular expression)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
正規表現 | 正規表現。 |
戻り値の型
BOOLEAN
例
SQL
server_protocol フィールドの値に数字が含まれているかどうかを確認します。
フィールドのサンプル
server_protocol:HTTP/2.0クエリ文 (テスト)
*| select regexp_like(server_protocol, '\d+')クエリと分析結果

SPL
server_protocol フィールドの値に数字が含まれているかどうかを確認します。
フィールドのサンプル
server_protocol:HTTP/2.0クエリ文
* |extend a = regexp_like(server_protocol, '\d+')クエリと分析結果

regexp_replace 関数
ソース文字列内の正規表現に一致する部分文字列を削除または置換します。
構文
ソース文字列から正規表現に一致する部分文字列を削除し、残りの部分文字列を返します。
regexp_replace(x, regular expression)ソース文字列内の正規表現に一致する部分文字列を置き換え、新しい文字列を返します。
regexp_replace(x, regular expression, replace string)
パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
正規表現 | 正規表現。 |
置換文字列 | 置換に使用される部分文字列。 |
戻り値の型
VARCHAR
例
SQL
例 1:
regionフィールドの値でcnで始まるリージョン名を [中国] に置き換え、中国からのリクエスト数を計算します。例
region:cn-shanghaiクエリ文 (テスト)
* | select regexp_replace(region, 'cn.*','China') AS region, count(*) AS count GROUP BY regionクエリと分析結果

例 2:
server_protocolフィールドの値からバージョン番号を削除し、各通信プロトコルのリクエスト数を計算します。フィールドのサンプル
server_protocol:HTTP/2.0クエリ文 (テスト)
*| select regexp_replace(server_protocol, '.\d+') AS server_protocol, count(*) AS count GROUP BY server_protocolクエリと分析結果

SPL
例 1:
regionフィールドの値で cn で始まるリージョン名を China に置き換えます。フィールドのサンプル
region:cn-shanghaiクエリ文
* | extend a = regexp_replace(region, 'cn.*','China')クエリと分析結果

例 2:
server_protocolフィールドの値からバージョン番号を削除します。フィールドのサンプル
server_protocol:HTTP/2.0クエリ文 (テスト)
* | extend a = regexp_replace(server_protocol, '.\d+')クエリと分析結果

regexp_split 関数
regexp_split 関数は、ソース文字列を分割し、部分文字列の配列を返します。
構文
regexp_split(x, regular expression)パラメーター
パラメーター | 説明 |
x | 値は VARCHAR 型です。 |
正規表現 | 正規表現。 |
戻り値の型
データ型は配列です。
例
スラッシュ (/) を使用して request_uri フィールドの値を分割します。
フィールドのサンプル
request_uri:/request/path-0/file-7クエリ文 (テスト)
* | SELECT regexp_split(request_uri,'/')クエリと分析結果
