17 エスケープの例
概要
このページでは、さまざまなコンテキストで正規表現を使用する際に正しいエスケープを使用する例を示します。
トリガー式コンストラクターを使用すると、正規表現に正しいエスケープが自動的に追加されます。
例
コンテキスト付きユーザーマクロ
正規表現: \.+\"[a-z]+
コンテキスト付きユーザーマクロ: {$MACRO:regex:"\.+\\"[a-z]+"}
注意:
- バックスラッシュはエスケープされません;
- 引用符はエスケープされます。
アイテムキーパラメータ内のマクロ関数
正規表現: .+:(\d+)$
アイテムキー: net.tcp.service[tcp,,"{{ITEM.VALUE}.regsub(\".+:(\d+)$\",\1)}"]
注意:
regsubマクロ関数内の正規表現は二重引用符で囲まれています(閉じ括弧が含まれているため)- 正規表現を囲む引用符はエスケープされます(3番目の項目パラメータ全体が二重引用符で囲まれているため)
- 3番目の項目キーパラメータはカンマを含むため二重引用符で囲まれています。
LLDマクロ関数
正規表現: \.+\"([a-z]+)
LLDマクロ: {{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}
注意:
- バックスラッシュはエスケープされません。
- 引用符はエスケープされます。
ユーザーマクロコンテキスト内のLLDマクロ関数
正規表現: \.+\"([a-z]+)
LLDマクロ: {{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}
コンテキスト付きユーザーマクロ: {$MACRO:"{{#MACRO}.iregsub(\"\.+\\\"([a-z]+)\", \1)}"}
注意:
- LLDマクロのバックスラッシュエスケープは変更されません。
- LLDマクロをユーザーマクロコンテキストに挿入する際は、以下の文字列にする必要があります。
- マクロ式の前後に引用符が追加されます。
- 引用符がエスケープされます。合計で3つの新しいバックスラッシュが導入されます。
履歴非保持関数の文字列パラメータ
文字列の内容: \.+\"[a-z]+
式: concat("abc", "\\.\\\"[a-z]+")
注意:
- 文字列パラメータでは、バックスラッシュと引用符の両方をエスケープする必要があります。
履歴関数の文字列パラメータ
文字列の内容: \.+\"[a-z]+
式: find(__ITEM_KEY__,,"regexp","\.+\\"[a-z]+")
注意:
- バックスラッシュはエスケープされません。
- 引用符はエスケープされます。
履歴関数以外の文字列パラメータ内のLLDマクロ関数
正規表現: \.+\"([a-z]+)
LLDマクロ: {{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}
式: concat("abc, "{{#MACRO}.iregsub(\"\\.+\\\\\"([a-z]+)\", \\1)}")
注意:
- 文字列パラメータでは、バックスラッシュと引用符の両方をエスケープする必要があります。
- マクロは文字列の引用符が解除された後にのみ解決されるため、エスケープ処理がさらに追加されます。
ヒストリー関数の文字列パラメータ内のLLDマクロ関数
正規表現: \.+\"([a-z]+)
LLDマクロ: {{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}
式: find(__ITEM_KEY__,,"eq","{{#MACRO}.iregsub(\"\.+\\\"([a-z]+)\", \1)}")
注意:
- バックスラッシュはエスケープされません。
- 引用符はエスケープされます。
非履歴関数の文字列パラメータ内にコンテキストを持つユーザーマクロ
正規表現: \.+\"[a-z]+
コンテキストを持つユーザーマクロ: {$MACRO:regex:"\.+\\"[a-z]+"}
式: concat("abc, "{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}")
注意:
- 前の例と同様に、追加のエスケープ処理が必要です。
- バックスラッシュと引用符は、トップレベルのエスケープ処理でのみエスケープされます。(文字列パラメータであるため)
履歴関数の文字列パラメータ内にコンテキストを持つユーザーマクロ
正規表現: \.+\"[a-z]+
コンテキストを持つユーザーマクロ: {$MACRO:regex:"\.+\\"[a-z]+"}
式: find(__ITEM_KEY__,,"eq","{$MACRO:regex:\"\.+\\\"[a-z]+\"}")
注意:
- バックスラッシュはエスケープされません。
- 引用符はエスケープされます。
履歴関数以外の関数内のユーザーマクロコンテキスト内の LLD マクロ関数
正規表現: \.+\"([a-z]+)
LLD マクロ: {{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}
コンテキストを持つユーザーマクロ: {$MACRO:"{{#MACRO}.iregsub(\"\.+\\\"([a-z]+)\", \1)}"}
式: concat("abc, "{$MACRO:\"{{#MACRO}.iregsub(\\\"\.+\\\\\\\"([a-z])+\\\", \\1)}\"}")
エスケープの3つのレイヤーに注意してください。
- LLDマクロ関数の場合バックスラッシュをエスケープしません。
- コンテキスト付きユーザーマクロの場合バックスラッシュをエスケープしません。
- 関数の文字列パラメータの場合バックスラッシュをエスケープします。
履歴関数内のユーザーマクロコンテキスト内のLLDマクロ関数
正規表現: \.+\"([a-z])+
LLDマクロ: {{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}
コンテキスト付きユーザーマクロ: {$MACRO:"{{#MACRO}.iregsub(\"\.+\\\"([a-z]+)\", \1)}"}
式: find(__ITEM_KEY__,,"eq","{$MACRO:\"{{#MACRO}.iregsub(\\"\.+\\\\"([a-z])+\\", \1)}\"}")
注意:
- バックスラッシュはエスケープされません。
- 引用符はエスケープされます。
文字列のすぐ内側にコンテキストがあるユーザーマクロ
正規表現: \.+\"[a-z]+
コンテキストがあるユーザーマクロ: {$MACRO:regex:"\.+\\"[a-z]+"}
何らかの表現の文字列内。例: func(arg1, arg2, arg3)="{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}"
注意:
- 文字列ではバックスラッシュによるエスケープも必要です。
- 文字列では引用符によるエスケープも必要です。
- ここでも2段階のエスケープが必要です。
- ユーザーマクロのコンテキストをエスケープするため、バックスラッシュエスケープは不要です。
- 文字列であるため、バックスラッシュエスケープは必要です。