You are viewing documentation for the development version, it may be incomplete.
Join our translation project and help translate Zabbix documentation into your native language.
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. バックスラッシュのエスケープありで文字列用のエスケープ。