このトピックでは、正規表現の一致モードと、正規表現の特殊文字をエスケープするために使用できるメソッドについて説明します。
完全一致
正規表現が文字列全体と一致する場合、完全一致が実行されます。 たとえば、\d +
は1234
に完全に一致します。
一部の関数は、正規表現の部分一致をサポートします。 完全一致を実行するには、キャレット (^
) とドル記号 ($
) を使用して ^ 正規表現 $
形式で正規表現を囲むことができます。 詳細については、「
次の表に、さまざまな関数の一致モードを示します。
カテゴリ | 関数 | マッチングモード |
グローバル処理機能 | 部分一致 | |
完全一致 | ||
完全一致 | ||
完全一致 | ||
部分一致 | ||
Expression functions | デフォルトで完全一致 (パラメータを使用して設定可能) | |
部分一致 | ||
部分一致 | ||
部分一致 | ||
デフォルトで部分一致 (パラメータを使用して設定可能) | ||
部分一致 | ||
部分一致 |
次の例は、さまざまなマッチングモードに基づいています。
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フィールドの値が正規表現と一致するかどうかは、実際の値に基づいています。 この例では、一致モードは完全一致とみなされる。
キャラクターエスケープ
正規表現には特殊文字を含めることができます。 文字の文字通りの意味を保持したい場合は、文字をエスケープする必要があります。 次のメソッドを使用して、特殊文字をエスケープできます。
バックスラッシュ (\) を使用します。
詳細については、「エスケープ特殊文字」をご参照ください。
str_regex_escape
関数を使用します。例1:
e_drop_fields(str_regex_escape("abc.test"))
を使用する場合、abc.testフィールドは破棄されます。例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
正規表現に共通キャプチャグループと名前付きキャプチャグループの両方が含まれている場合は、名前付きキャプチャグループには共通キャプチャグループの後に番号が付けられます。 Simple Log Serviceを使用すると、正規表現またはプログラムでキャプチャグループのカスタム名を直接参照できます。
キャプチャしていないグループ
キャプチャしていないグループに一致するテキストコンテンツはメモリにキャッシュされません。 グループの括弧内の内容 ()
が ?:
で始まる場合、グループは非キャプチャグループです。
たとえば、programとprojectを検索する場合は、pro(gram | ject)
の正規表現を使用できます。 正規表現に一致するコンテンツをメモリにキャッシュしたくない場合は、pro(?:gram | ject)
を使用できます。
(?:x)
は、x
がコンテンツと一致するが、一致したコンテンツはキャッシュされないことを指定します。 部分式を (?:x) 形式で定義し、部分式を正規表現の演算子と一緒に使用できます。