これは開発版のドキュメントを表示しています。内容が不完全な場合があります。
このページには自動翻訳されたコンテンツが含まれています。 誤りを見つけた場合は、その箇所を選択して Ctrl+Enter を押し、編集者に報告してください。
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)}")

注意:

  • 文字列パラメータはバックスラッシュと引用符の両方のエスケープが必要です;
  • 文字列がアンコートされた後にマクロが解決されるため、もう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. バックスラッシュのエスケープありで文字列用のエスケープ。