このトピックでは、正規表現の一致モードと、正規表現の特殊文字をエスケープするために使用できるメソッドについて説明します。
完全一致
正規表現が文字列全体にマッチする場合、完全一致が実行されます。たとえば、\d +
は1234
に完全に一致します。
正規表現の部分一致をサポートする関数もあります。 完全一致を実行するには、キャレット (^
) とドル記号 ($
) を使用して ^ 正規表現 $
形式で正規表現を囲むことができます。 For more information, see Regular expression operations.
次の表に、さまざまな関数の一致モードを示します。
カテゴリー | 機能 | 一致モード |
---|---|---|
グローバル処理機能 | t947544.html#section_1rn_crw_ur9 | 部分一致 |
t947541.html#section_e3g_856_vs6 | 完全一致 | |
t947541.html#section_q8m_zn8_uvj | 完全一致 | |
t947541.html#section_dg9_67q_cjh | 完全一致 | |
t947544.html#section_n3z_qjb_xpp | 部分一致 | |
t947545.html#section_pbk_lwq_04u | 部分一致 | |
t947545.html#section_mp3_goc_rxa | 部分一致 | |
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に一致するフィールドは破棄されます。 疑問符 (?) は任意の文字を指定します。
- Example 1: If you use
グループ
()
を使用して、部分表現を正規表現で囲み、グループを作成できます。 グループは繰り返し参照できます。 次の例は、グループの作成前と作成後の正規表現の違いを示しています。 """
処理前のログ:
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", "\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を使用すると、正規表現またはプログラムでキャプチャグループのカスタム名を直接参照できます。
キャプチャしていないグループ
キャプチャしていないグループに一致するテキストコンテンツはメモリにキャッシュされません。 グループの括弧内の内容 ()
が ?:
で始まる場合、グループは非キャプチャグループです。
たとえば、programとprojectを検索する場合は、
pro(gram | ject)
の正規表現を使用できます。 正規表現に一致するコンテンツをメモリにキャッシュしたくない場合は、pro(?:gram | ject)
を使用できます。 説明
(?:x)
は、x
がコンテンツと一致するが、一致したコンテンツはキャッシュされないことを指定します。 部分式を (?:x) 形式で定義し、部分式を正規表現の演算子と一緒に使用できます。