このトピックでは、正規表現関数の構文について説明します。 このトピックでは、関数の使用方法の例も示します。
次の表に、Simple Log Serviceでサポートされている正規表現関数を示します。 正規表現はRE2構文を使用します。
関数 | 構文 | 説明 | SQLでサポート | SPLでサポート |
regexp_extract_all( x、正規表現) | 指定された正規表現に一致する部分文字列を指定された文字列から抽出し、一致したすべての部分文字列の配列を返します。 | ✓ | × | |
regexp_extract_all( x、正規表現、n) | 指定した正規表現に一致する部分文字列を指定した文字列から抽出し、正規表現のn番目のキャプチャグループに一致する部分文字列の配列を返します。 | ✓ | × | |
regexp_extract( x、正規表現) | 指定された正規表現と一致する最初の部分文字列を指定された文字列から抽出し、部分文字列を返します。 | ✓ | ✓ | |
regexp_extract( x、正規表現、n) | 指定された正規表現に一致する部分文字列を指定された文字列から抽出し、正規表現のn番目のキャプチャグループに一致する最初の部分文字列を返します。 | ✓ | ✓ | |
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, regular expression)
次の構文を使用して、指定した文字列から指定した正規表現に一致する部分文字列を抽出し、正規表現のn番目のキャプチャグループに一致する部分文字列の配列を返します。
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+')
説明正規表現関数を使用して文字列から単一引用符 (') を抽出する場合は、正規表現に単一引用符 (') を追加する必要があります。
クエリと分析結果
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_like関数
regexp_like関数は、指定された文字列が指定された正規表現と一致するかどうかをチェックします。
構文
regexp_like(x, regular expression)
パラメーター
パラメーター | 説明 |
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, regular expression)
次の構文を使用して、指定された文字列内の指定された正規表現に一致する部分文字列を置き換え、結果文字列を返します。
regexp_replace(x, regular expression, replace string)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値はvarchar型です。 |
正規表現 | 正規表現を入力します。 |
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型です。 |
正規表現 | 正規表現を入力します。 |
戻り値のデータ型
配列型。
例
request_uri
フィールドの値をスラッシュ (/) で分割します。
サンプルフィールド
request_uri:/request/path-0/file-7
クエリ文 (デバッグ)
* | SELECT regexp_split(request_uri,'/')
クエリと分析結果