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

Simple Log Service:正規表現

最終更新日:Aug 28, 2024

このトピックでは、正規表現の一致モードと、正規表現の特殊文字をエスケープするために使用できるメソッドについて説明します。

完全一致

正規表現が文字列全体にマッチする場合、完全一致が実行されます。たとえば、\d +1234に完全に一致します。

正規表現の部分一致をサポートする関数もあります。 完全一致を実行するには、キャレット (^) とドル記号 ($) を使用して ^ 正規表現 $形式で正規表現を囲むことができます。 For more information, see Regular expression operations.

次の表に、さまざまな関数の一致モードを示します。

カテゴリー

機能

一致モード

グローバル処理機能

e_regex

部分一致

e_keep_fields

完全一致

e_drop_fields

完全一致

e_rename

完全一致

e_kv

部分一致

e_search_dict_map

部分一致

e_search_table_map

部分一致

Expression functions

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フィールドの値が正規表現と一致するかどうかは、実際の値に基づいて判断されます。 この例では、一致モードは完全一致とみなされる。

キャラクターエスケープ

正規表現には特殊文字を含めることができます。 文字の字義を保持したい場合は、その文字をエスケープする必要があります。特殊文字をエスケープするには、次の方法を使用できます:

  • Use backslashes (\).

    詳細については、「特殊文字のエスケープ」をご参照ください。

  • Use the str_regex_escape function.

    • Example 1: If you use e_drop_fields(str_regex_escape("abc.test"), the abc.test field is discarded.

    • 例2: e_drop_fields("abc.test") を使用する場合、abc?testに一致するフィールドは破棄されます。 疑問符 (?) は任意の文字を指定します。

グループ

() を使用して、部分表現を正規表現で囲み、グループを作成できます。 グループは繰り返し参照できます。 次の例は、グループの作成前と作成後の正規表現の違いを示しています。

"""
Log before processing:
SourceIP: 192.0.2.1
Log after processing:
SourceIP: 192.0.2.1
ip: 192.0.2.1
"""
# Before a group is created:
e_regex("SourceIP",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")
# After a group is created:
e_regex("SourceIP", "\d{1,3}(.\d{1,3}){3}", "ip")

キャプチャグループ

キャプチャグループに一致するテキストコンテンツはメモリにキャッシュされます。 一致したテキストコンテンツは、バックリファレンスを使用して他の正規表現で再利用できます。 グループの () で囲まれた内容が、 ?:で始まらない場合、そのグループはキャプチャリンググループである。

デフォルトでは、すべてのキャプチャグループは、開始括弧に基づいて左から右に番号付けされます。最初のグループには 1、2 番目のグループには 2 というように番号が付けられます。 次の例では、3つのキャプチャグループが作成されています。:

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

1     1 2      3     32

正規表現に共通キャプチャグループと名前付きキャプチャグループの両方が含まれている場合は、名前付きキャプチャグループには共通キャプチャグループの後に番号が付けられます。 Log Serviceを使用すると、正規表現またはプログラムでキャプチャグループのカスタム名を直接参照できます。

キャプチャしていないグループ

キャプチャしていないグループに一致するテキストコンテンツはメモリにキャッシュされません。 グループの括弧内の内容 ()?: で始まる場合、グループは非キャプチャグループです。

たとえば、programprojectを検索する場合は、pro(gram | ject) の正規表現を使用できます。 正規表現に一致するコンテンツをメモリにキャッシュしたくない場合は、pro(?:gram | ject) を使用できます。

説明

(?:x) は、xがコンテンツと一致するが、一致したコンテンツはキャッシュされないことを指定します。 部分式を (?:x) 形式で定義し、部分式を正規表現の演算子と一緒に使用できます。