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