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

Simple Log Service:正規表現

最終更新日:Jun 05, 2026

SLS のデータ変換で正規表現のマッチング、文字のエスケープ、グループ化をどのように処理するかを説明します。

完全一致

完全一致では、正規表現が文字列全体と一致する必要があります。 例えば、\d+ は、文字列 1234 と完全一致します。

一部の機能は部分一致をサポートしています。完全一致を適用するには、先頭に^を、末尾に$を追加します。例: ^regular expression$。正規表現の完全な構文は、 Python の正規表現の操作リファレンスに記載されています。

次の表に、各関数のマッチングモードを示します。

カテゴリ

関数

マッチングモード

グローバル操作関数

e_regex

部分一致

e_keep_fields

完全一致

e_drop_fields

完全一致

e_rename

完全一致

e_kv

部分一致

式関数

e_match

パラメータによって制御されます。デフォルトは完全一致です。

e_search

部分一致

regex_select

部分一致

regex_findall

部分一致

regex_match

パラメータによって制御されます。デフォルトは部分一致です。

regex_replace

部分一致

regex_split

部分一致

マッチングモードの例:

  • regex_match("abc123", r"\d+"): 一致します (デフォルトでは部分一致)。

  • regex_match("abc123", r"\d+", full=True): 一致しません (完全一致が有効)。

  • regex_match("abc123", r"^\d+$"): 一致しません。完全一致モードと同等です。

  • e_search(r'status~="\d+"'): status フィールドの値に一致します。部分一致モードに相当します。

  • e_search(r'status~="^\d+$"'): status フィールド値に一致します。完全一致モードと同等です。

文字のエスケープ

正規表現には特殊文字が含まれます。これらをリテラルとして一致させるには、次のいずれかの方法でエスケープします。

  • バックスラッシュ (\) でエスケープします。

    Character escaping に完全な構文が記載されています。

  • str_regex_escape 関数を使用します。

    • たとえば、e_drop_fields(str_regex_escape("abc.test"))abc.test フィールドを削除します。

    • たとえば、e_drop_fields("abc.test")abc?test に一致するフィールドを削除します。ここで、クエスチョンマーク (?) は任意の 1 文字を表します。

グループ化

丸括弧 () は、繰り返しや後方参照のために式をグループ化します。次の例にその違いを示します。

"""
処理前のログ:
SourceIP: 192.0.2.1
処理後のログ:
SourceIP: 192.0.2.1
ip: 192.0.2.1
"""
# グループなし:
e_regex("SourceIP", r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "ip")
# グループあり:
e_regex("SourceIP", r"\d{1,3}(\.\d{1,3}){3}", "ip")

キャプチャグループ

キャプチャグループは、後方参照で利用するために一致結果を保存します。丸括弧 ()?: で始まらないグループは、キャプチャグループです。

キャプチャグループは、開き括弧の出現順に、左から右へ1から番号が振られます。たとえば次の式には 3 つのグループがあります。

(\d{4})-(\d{2}-(\d{2}))

1     1 2      3     32

正規表現に標準のキャプチャグループと名前付きキャプチャグループの両方が含まれる場合、標準グループが先に番号付けされ、その後に名前付きグループが続きます。SLS では、式やプログラム内で名前付きグループを名前で直接参照できます。

非キャプチャグループ

非キャプチャグループは、一致した内容を保存しません。丸括弧()?: で始まるグループは、非キャプチャグループです。

プログラムまたはプロジェクトに一致させるには、 pro(gram|ject) を使用します。一致のキャッシュが不要な場合は、非キャプチャ形式 pro(?:gram|ject) を使用します。

説明

(?:x) は、結果をキャッシュせずに x に一致し、正規表現演算子で使用する部分式を定義できるようにします。