このトピックでは、正規表現関数の構文及び使用方法の例について説明します。
正規表現関数の概要
次の表に、Simple Log Service でサポートされている正規表現関数を示します。正規表現には RE2 構文が使用されます。詳細については、「RE2 構文」をご参照ください。
分析文で文字列を使用する場合は、文字列を一重引用符 ('') で囲む必要があります。囲まれていない文字列または二重引用符 ("") で囲まれている文字列は、フィールド名または列名を示します。たとえば、 'status' は「status」という文字列を示し、status または "status" は「status」というフィールドを示します。
関数 | 構文 | 説明 | SQL でのサポート | SPL でのサポート |
regexp_extract_all(x, regular expression) | 指定した正規表現に一致する部分文字列を指定された文字列から抽出し、一致するすべての部分文字列の配列を返します。 | √ | × | |
regexp_extract_all(x, regular expression, n) | 指定した正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現の n 番目のキャプチャグループに一致する部分文字列の配列を返します。 | √ | × | |
regexp_extract(x, regular expression) | 指定した正規表現に一致する最初の部分文字列を指定された文字列から抽出し、その部分文字列を返します。 | √ | √ | |
regexp_extract(x, regular expression, n) | 指定した正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現の n 番目のキャプチャグループに一致する最初の部分文字列を返します。 | √ | √ | |
regexp_extract_bool(x, regular expression) | 指定した正規表現に一致する部分文字列を指定された文字列から抽出し、その部分文字列を boolean 型に変換します。変換に失敗した場合は | √ | × | |
regexp_extract_bool(x, regular expression, n) | 指定した正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現の n 番目のキャプチャグループに一致する部分文字列を返します。その部分文字列を boolean 型に変換します。変換に失敗した場合は | √ | × | |
regexp_extract_long(x, regular expression) | 指定した正規表現に一致する部分文字列を指定された文字列から抽出し、その部分文字列を bigint 型に変換します。変換に失敗した場合は | √ | × | |
regexp_extract_long(x, regular expression, n) | 指定した正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現の n 番目のキャプチャグループに一致する部分文字列を返します。その部分文字列を bigint 型に変換して、変換に失敗した場合は | √ | × | |
regexp_extract_double(x, regular expression) | 指定した正規表現に一致する最初の部分文字列を指定された文字列から抽出し、その部分文字列を double 型に変換します。変換に失敗した場合は | √ | × | |
regexp_extract_double(x, regular expression, n) | 指定した正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現の n 番目のキャプチャグループに一致する部分文字列を返します。その部分文字列を double 型に変換して、変換に失敗した場合は | √ | × | |
regexp_like(x, regular expression) | 指定された文字列が指定した正規表現と一致するかどうかをチェックします。 | √ | √ | |
regexp_replace(x, regular expression) | 指定した正規表現に一致する部分文字列を指定された文字列から削除し、残っている部分文字列を返します。 | √ | √ | |
regexp_replace(x, regular expression, replace string) | 指定された文字列の中で、指定した正規表現に一致する部分文字列を置き換えてから、文字列を返します。 | √ | √ | |
regexp_split(x, regular expression) | 指定された正規表現を使用して、文字列を複数の部分文字列に分割し、部分文字列の配列を返します。 | √ | × |
正規表現関数を使用して文字列から一重引用符 (') を抽出する場合は、正規表現にもう一つの一重引用符 (') を追加する必要があります。詳細については、「regexp_extract 関数 (例 3)」をご参照ください。
regexp_extract_all 関数
regexp_extract_all 関数は、指定した正規表現に一致する部分文字列を指定された文字列から抽出します。
構文
指定した正規表現に一致する部分文字列を指定された文字列から抽出し、一致するすべての部分文字列の配列を返します。
regexp_extract_all(x, regular expression)
指定した正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現の n 番目のキャプチャグループに一致する部分文字列の配列を返します。
regexp_extract_all(x, regular expression, n)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値の型が varchar 型です。 |
regular expression | キャプチャグループを含む正規表現です。たとえば、 |
n | n 番目のキャプチャグループです。n は 1 以上の整数です。 |
戻り値の型
array 型
例
例 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 型です。 |
regular expression | キャプチャグループを含む正規表現です。たとえば、 |
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+')
説明正規表現関数を使用して文字列から一重引用符 (') を抽出する場合は、正規表現にもう一つの一重引用符 (') を追加する必要があります。
クエリと分析の結果
SPL
例 1: server_protocol フィールドの値から最初の数字を抽出します。
フィールド
server_protocol:HTTP/2.0
SPL 文
* | extend a = regexp_extract(server_protocol, '\d+')
SPL の結果
例 2:
request_uri
フィールドの値からファイル情報を抽出します。フィールド
request_uri:/request/path-3/file-5
SPL 文
* | extend a = regexp_extract(request_uri, '.*\/(file.*)',1)
SPL の結果
例 3:
message
フィールドの値から一重引用符 (') と数字を抽出します。フィールド
message:error'1232
SPL 文
* | extend a = regexp_extract(message, '''\d+')
説明
正規表現関数を使用して文字列から一重引用符 (') を抽出する場合は、正規表現にもう一つの一重引用符 (') を追加する必要があります。
SPL の結果
regexp_extract_bool 関数
regexp_extract_bool 関数は、指定した正規表現に一致する部分文字列を指定された文字列から抽出し、その部分文字列を boolean 型に変換します。変換に失敗した場合は null
が返されます。部分文字列が「true」または「false」という単語である場合にのみ、変換が成功します。「true」または「false」という単語は、大文字と小文字を区別しません。
構文
指定した正規表現に一致する部分文字列を指定された文字列から抽出し、その部分文字列を boolean 型に変換します。変換に失敗した場合は
null
が返されます。regexp_extract_bool(x, regular expression)
指定した正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現の n 番目のキャプチャグループに一致する部分文字列を返します。その部分文字列を boolean 型に変換して、変換に失敗した場合は
null
が返されます。regexp_extract_bool(x, regular expression, n)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値の型が varchar 型です。 |
regular expression | キャプチャグループを含む正規表現です。たとえば、 |
n | n 番目のキャプチャグループです。n は 1 以上の整数です。 |
戻り値の型
boolean 型
例
フィールドの値から 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)
指定した正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現の n 番目のキャプチャグループに一致する部分文字列を返します。その部分文字列を bigint 型に変換して、変換に失敗した場合は
null
が返されます。regexp_extract_long(x, regular expression, n)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値の型が varchar 型です。 |
regular expression | キャプチャグループを含む正規表現です。たとえば、 |
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)
指定した正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現の n 番目のキャプチャグループに一致する部分文字列を返します。その部分文字列を double 型に変換して、変換に失敗した場合は
null
が返されます。regexp_extract_double(x, regular expression, n)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値の型が varchar 型です。 |
regular expression | キャプチャグループを含む正規表現です。たとえば、 |
n | n 番目のキャプチャグループです。n は 1 以上の整数です。 |
戻り値の型
double 型
例
server_protocol
フィールドの値から数字を抽出します。フィールド
server_protocol:HTTP/1.1
クエリ文 (デバッグ)
*|SELECT regexp_extract_double(server_protocol, '\d+')
クエリと分析の結果
regexp_like 関数
regexp_like 関数は、指定された文字列が指定した正規表現と一致するかどうかをチェックします。
構文
regexp_like(x, regular expression)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値の型が varchar 型です。 |
regular expression | 正規表現を入力すること。 |
戻り値の型
boolean 型
例
SQL
server_protocol フィールドの値に数字が含まれているかどうかを確認します。
フィールド
server_protocol:HTTP/2.0
クエリ文 (デバッグ)
*| select regexp_like(server_protocol, '\d+')
クエリと分析の結果
SPL
server_protocol フィールドの値に数字が含まれているかどうかを確認します。
フィールド
server_protocol:HTTP/2.0
SPL 文
* |extend a = regexp_like(server_protocol, '\d+')
SPL の結果
regexp_replace 関数
regexp_replace 関数は、指定した正規表現に一致する部分文字列を指定された文字列から削除、または置換します。
構文
指定した正規表現に一致する部分文字列を指定された文字列から削除し、残っている部分文字列を返します。
regexp_replace(x, regular expression)
指定された文字列の中で、指定した正規表現に一致する部分文字列を置き換えてから、文字列を返します。
regexp_replace(x, regular expression, replace string)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値の型が varchar 型です。 |
regular expression | 正規表現を入力すること。 |
replace string | 正規表現に一致する部分文字列を置換する部分文字列。 |
戻り値の型
varchar 型
例
SQL
例 1:
region
フィールドの値の中でcn
で始まるリージョン名を China に置き換え、China からのリクエスト数を計算します。フィールド
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
SPL 文
* | extend a = regexp_replace(region, 'cn.*','China')
SPL の結果
例 2:
server_protocol
フィールドの値の中でバージョン番号を削除します。フィールド
server_protocol:HTTP/2.0
SPL 文 (デバッグ)
* | extend a = regexp_replace(server_protocol, '.\d+')
SPL の結果
regexp_split 関数
regexp_split 関数は、指定された正規表現を使用して、文字列を複数の部分文字列に分割し、部分文字列の配列を返します。
構文
regexp_split(x, regular expression)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値の型が varchar 型です。 |
regular expression | 正規表現を入力すること。 |
戻り値の型
array 型
例
request_uri
フィールドの値をスラッシュ (/) で分割します。
フィールド
request_uri:/request/path-0/file-7
クエリ文 (デバッグ)
* | SELECT regexp_split(request_uri,'/')
クエリと分析の結果