Table of Contents

17 エスケープの例

概要

このページでは、さまざまなコンテキストで正規表現を使用する際に正しいエスケープを使用する例を示します。

トリガー式コンストラクターを使用すると、正規表現に正しいエスケープが自動的に追加されます。

コンテキスト付きユーザーマクロ

正規表現: \.+\"[a-z]+
コンテキスト付きユーザーマクロ: {$MACRO:regex:"\.+\\"[a-z]+"}

注意:

アイテムキーパラメータ内のマクロ関数

正規表現: .+:(\d+)$
アイテムキー: net.tcp.service[tcp,,"{{$ENDPOINT}.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マクロをユーザーマクロコンテキストに挿入する際は、文字列に組み込む必要があります。
    1. マクロ式の前後に引用符が追加されます。
    2. 引用符がエスケープされます。合計で3つの新しいバックスラッシュが導入されます。

関数の文字列パラメータ (任意)

concatを例として使用します。

文字列の内容: \.+\"[a-z]+
式: concat("abc", "\\.\\\"[a-z]+")

注意:

  • 文字列パラメータでは、バックスラッシュと引用符の両方をエスケープする必要があります。

関数の文字列パラメータ内にLLDマクロ関数があります

正規表現: \.+\"([a-z]+)
LLDマクロ: {{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}
式: concat("abc, "{{#MACRO}.iregsub(\"\\.+\\\\\"([a-z]+)\", \\1)}")

注意:

  • 文字列パラメータでは、バックスラッシュと引用符の両方をエスケープする必要があります。
  • マクロは文字列が引用符で囲まれていない場合にのみ解決されます。

関数の文字列パラメータ内にコンテキストを持つユーザーマクロ

正規表現: \.+\"[a-z]+
コンテキストを持つユーザーマクロ: {$MACRO:regex:"\.+\\"[a-z]+"}
式: concat("abc, "{$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つのレイヤーに注意してください。

1. LLDマクロ関数の場合(バックスラッシュをエスケープしません)。
       2. コンテキスト付きユーザーマクロの場合(バックスラッシュをエスケープしません)。
       3. 関数の文字列パラメータの場合(バックスラッシュをエスケープします)。

文字列のすぐ内側にコンテキストがあるユーザーマクロ

正規表現: \.+\"[a-z]+
コンテキストがあるユーザーマクロ: {$MACRO:regex:"\.+\\"[a-z]+"}
何らかの表現の文字列内。例: func(arg1, arg2, arg3)="{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}"

注意:

  • 文字列ではバックスラッシュによるエスケープも必要です。
  • 文字列では引用符によるエスケープも必要です。
  • ここでも2段階のエスケープが必要です。
    1. ユーザーマクロのコンテキストをエスケープするため、バックスラッシュエスケープは不要です。
    2. 文字列であるため、バックスラッシュエスケープは必要です。