[comment]: # attributes: notoc

[comment]: # ({b219ec06-0458cee0})
# 1 マクロ関数

#### 概要

マクロ関数を使用すると、[マクロ](/manual/config/macros)の値をカスタマイズできます（たとえば、特定の部分文字列を短縮したり抽出したりできます）。これにより、より扱いやすくなります。

マクロ関数の構文は次のとおりです。

```default
{macro.func(params)}
```

ここで

-   **macro** - カスタマイズするマクロ。
-   **func** - 適用する関数（[サポートされている関数](#supported-functions)を参照）。
-   **params** - 関数パラメータのカンマ区切りリスト。次の場合は**二重引用符**で囲む必要があります。
    -   先頭がスペースまたは二重引用符である場合。
    -   閉じ括弧またはカンマを含む場合。

例:

```default
{{TIME}.fmttime(format,time_shift)}
{{ITEM.VALUE}.regsub(pattern, output)}
{{$USERMACRO}.regsub(pattern, output)}
{{#LLDMACRO}.regsub(pattern, output)}
```

マクロ関数は次でサポートされています。

-   [組み込みマクロ](/manual/appendix/macros/supported_by_location)
-   [ユーザーマクロ](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [ローレベルディスカバリマクロ](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [式マクロ](/manual/appendix/macros/supported_by_location#other-macro-types)

マクロ関数は、上記のマクロがサポートされているすべての場所で使用できます。  
ただし、明示的にマクロのみが想定されている場合は除きます（たとえば、[ホストマクロ](/manual/config/hosts/host#configuration)またはローレベルディスカバリルールの[フィルター](/manual/discovery/low_level_discovery#filter)を設定する場合）。

参照: [既知の問題](/manual/installation/known_issues#macro-functions)

1 つのマクロにつき 1 つの関数のみサポートされます。複数のマクロ関数を連結して使用することはできません。

:::noteclassic
マクロ関数を他のコンテキスト（関数、アイテムキー、別のマクロなど）の中で使用する場合については、[エスケープの例](/manual/appendix/escaping)を参照してください。
:::

[comment]: # ({/b219ec06-0458cee0})

[comment]: # ({49d5aaf8-f23fb953})

#### サポートされている関数

関数は追加情報なしでリストされています。
関数をクリックすると詳細が表示されます。

|関数|説明|
|--|--------|
|[btoa](#btoa)|マクロ値をBase64形式にエンコードします。|
|[fmtnum](#fmtnum)|小数点以下の桁数を制御するための数値フォーマットです。|
|[fmttime](#fmttime)|時刻フォーマットです。|
|[htmldecode](#htmldecode)|マクロ値をHTMLエンコードからデコードします。|
|[htmlencode](#htmlencode)|マクロ値をHTMLエンコードにエンコードします。|
|[iregsub](#iregsub)|正規表現マッチングによる部分文字列抽出（大文字と小文字を区別しません）。|
|[lowercase](#lowercase)|マクロ値の文字を小文字に変換します。|
|[regrepl](#regrepl)|マクロ値内の文字/部分文字列を置換します。|
|[regsub](#regsub)|正規表現マッチングによる部分文字列の抽出（大文字と小文字を区別します）。|
|[tr](#tr)|マクロ値の文字を変換します。|
|[uppercase](#uppercase)|マクロ値の文字を大文字に変換します。|
|[urldecode](#urldecode)|URLエンコードからマクロ値をデコードします。|
|[urlencode](#urlencode)|マクロ値をURLエンコードにエンコードします。|

[comment]: # ({/49d5aaf8-f23fb953})

[comment]: # ({91058888-c1632a9e})
#### 関数の詳細

オプションの関数パラメータは < > で示されます。

[comment]: # ({/91058888-c1632a9e})

[comment]: # ({d82603b4-26fb165d})
##### btoa {#btoa}

マクロ値をBase64エンコーディングに変換します。  
Base64エンコーディングは、バイナリデータをテキストとして表現する方法であり、テキストベースのプロトコル上でバイナリコンテンツを保存したり、安全に送信したりする際に役立ちます。

例:

```default
{{ITEM.VALUE}.btoa()} - "zabbix" のような値を "emFiYml4" にBase64エンコードします
```

この関数は、Zabbix 7.0.4 以降でサポートされています。

[comment]: # ({/d82603b4-26fb165d})

[comment]: # ({31245134-4df3fd19})
##### fmtnum(digits) {#fmtnum}

小数点以下に表示する桁数を制御するための数値書式設定です。

パラメータ:

-   **digits** - 小数点以下の桁数。
有効範囲: 0～20。
末尾のゼロは出力されません。

例:

```default
{{ITEM.VALUE}.fmtnum(2)} - 受信した値 "24.3483523" から "24.35" を返します
{{ITEM.VALUE}.fmtnum(0)} - 受信した値 "24.3483523" から "24" を返します
```

[comment]: # ({/31245134-4df3fd19})

[comment]: # ({1bcbff41-3caa4dc7})
##### fmttime(format,<time\_shift>) {#fmttime}

時刻の書式設定。<br>
この関数は、次のいずれかの時刻形式の値に解決されるマクロで使用できます。

-   `hh:mm:ss`
-   `yyyy-mm-ddThh:mm:ss[tz]` (ISO8601 standard)
-   UNIX timestamp

パラメーター:

-   **format** - 必須の書式文字列。`strftime` 関数の書式指定と互換性があります。<br>
-   **time\_shift** (optional) - 書式設定の前に時刻へ適用する時間シフトです。`-<N><time_unit>` または `+<N><time_unit>` で始める必要があります。ここで、<br>
    -   `N` - 加算または減算する時間単位の数;
    -   `time_unit` - h (hour), d (day), w (week), M (month) or y (year).

コメント:

-   `time_shift` パラメーターは複数段階の時刻操作をサポートし、時刻単位の先頭へシフトするための `/<time_unit>` を含めることができます
    (`/d` - midnight, `/w` - 1st day of the week (Monday), `/M` - 1st day of the month, etc.).
    例: `-1w` - ちょうど 7 日前; `-1w/w` - 前週の月曜日; `-1w/w+1d` - 前週の火曜日。
-   時刻操作は優先順位なしで左から右へ計算されます。
たとえば、`-1M/d+1h/w` は `((-1M/d)+1h)/w` として解釈されます。

例:

```default
{{TIMESTAMP}.fmttime(%B)} - 受信した値が "1633098961" の場合、"October" を返します
{{TIMESTAMP}.fmttime(%d %B,-1M/M)} - 受信した値が "1633098961" の場合、"1 September" を返します
```

[comment]: # ({/1bcbff41-3caa4dc7})

[comment]: # ({26e2caaa-6f65f316})
##### htmldecode {#htmldecode}

マクロ値をHTMLエンコーディングからデコードします。  
この関数は Zabbix 7.0.4 以降でサポートされています。

以下の文字がサポートされています。

|Value|デコード後の値|
|----|------|
|`&amp;`|`&`|
|`&lt;`|`<`|
|`&gt;`|`>`|
|`&quot;`|`"`|
|`&#039;`|`'`|
|`&#39;`|`'`|

例:

```default
{{ITEM.VALUE}.htmldecode()} - "&lt;" のような値を "<" にHTMLデコードします
```

[comment]: # ({/26e2caaa-6f65f316})

[comment]: # ({f282eb66-c4adc457})
##### htmlencode {#htmlencode}

マクロ値をHTMLエンコードに変換します。  
この関数は Zabbix 7.0.4 以降でサポートされています。

以下の文字がサポートされています。

|値|エンコード後の値|
|----|------|
|`&`|`&amp;`|
|`<`|`&lt;`|
|`>`|`&gt;`|
|`"`|`&quot;`|
|`'`|`&#39;`|

例:

```default
{{ITEM.VALUE}.htmlencode()} - "<" のような文字を "&lt;" にHTMLエンコードします
```

[comment]: # ({/f282eb66-c4adc457})

[comment]: # ({edaa6df7-e78b5abd})
##### iregsub(pattern,output) {#iregsub}

正規表現の一致による部分文字列の抽出（大文字・小文字を区別しない）。

パラメータ:

-   **pattern** - 一致させる正規表現;
-   **output** - 出力オプション。
**\\1 - \\9** プレースホルダーはキャプチャグループに対応しています。
**\\0** は一致したテキストを返します。

コメント:

-   正規表現に一致しない場合、この関数は空文字列を返します。
-   関数の pattern が不正な正規表現である場合、マクロは 'UNKNOWN' と評価されます（ただし、ローレベルディスカバリマクロは例外で、この場合は関数は無視され、マクロは未解決のままになります）。
-   置換文字列内で存在しないキャプチャグループを参照した場合は、空文字列に置き換えられます。

例:

```default
{{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - "fail"、"error"、"fault"、または "problem" の部分文字列を受信した場合（大文字・小文字を区別しない）は "ERROR" に解決されます。一致しない場合は空文字列を返します
```

[comment]: # ({/edaa6df7-e78b5abd})

[comment]: # ({67e9a7db-9922adb7})
##### lowercase {#lowercase}

マクロ値のすべての文字を小文字に変換します。  
シングルバイト文字セット（ASCII など）で動作し、UTF-8 はサポートしていません。  
この関数は Zabbix 7.0.4 以降でサポートされています。

例:

```default
{{ITEM.VALUE}.lowercase()} - "Zabbix SERVER" のような値を "zabbix server"（小文字）に変換します
```

[comment]: # ({/67e9a7db-9922adb7})

[comment]: # ({40208dc1-031347c2})
##### regrepl(pattern,replacement,<pattern2>,<replacement2>,...) {#regrepl}

マクロ値内の文字/部分文字列の置換。<br>
この関数は **libpcre2** ライブラリでのみサポートされることに注意してください。  
Zabbixサーバー/プロキシが `libpcre` でコンパイルされている場合、この関数は UNKNOWN を返します。  
この関数は Zabbix 7.0.4 以降でサポートされています。

パラメータ:

-   **pattern** - 一致させる正規表現;
-   **replacement** - 置換文字列。  
**\\1 - \\9** プレースホルダーは、キャプチャグループを参照するために置換文字列内でサポートされています。

コメント:

-   パターンと置換は順番に処理され、後続の各ペアは前の置換結果に従って適用されます;
-   置換文字列内で存在しないキャプチャグループを参照した場合は、空文字列に置き換えられます。

例:

```default
{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - "oldParam" を "newParam" に置き換えます
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - 英字以外のすべての文字はバックスラッシュでエスケープされます
{$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - 末尾のバックスラッシュを削除します（たとえば "C:\" を "C:" に置き換える場合）
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - アイテム値内の複数の部分を置き換えます
```

[comment]: # ({/40208dc1-031347c2})

[comment]: # ({825c2e80-a8dcf3b5})
##### regsub(pattern,output) {#regsub}

正規表現の一致による部分文字列の抽出（大文字・小文字を区別）。

パラメータ:

-   **pattern** - 一致させる正規表現。
-   **output** - 出力オプション。
**\\1 - \\9** プレースホルダーはキャプチャグループに対応しています。
**\\0** は一致したテキストを返します。

コメント:

-   正規表現に一致しない場合、この関数は空文字列を返します。
-   関数の pattern が不正な正規表現である場合、マクロは 'UNKNOWN' と評価されます（ただし、ローレベルディスカバリのマクロは例外で、この場合は関数は無視され、マクロは未解決のままになります）。
-   置換文字列内で存在しないキャプチャグループを参照した場合は、空文字列に置き換えられます。

例:

```default
{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - "123 Log line" のような値を受信した場合は "Problem ID: 123" に展開されます
{{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - "fail"、"error"、"fault"、または "problem" の部分文字列を受信した場合は "ERROR" に展開されます（大文字・小文字を区別）。一致しない場合は空文字列を返します
```

[その他の例](#additional-examples)も参照してください。

[comment]: # ({/825c2e80-a8dcf3b5})

[comment]: # ({f0be3d81-e91a391f})
##### tr(characters,replacement) {#tr}

マクロ値の文字を変換します。

この関数はZabbix 7.0.4以降でサポートされています。

- **characters** - 置換する文字セット。
- **replacement** - 位置的に対応する置換文字セット。

例:

```default
{{ITEM.VALUE}.tr(abc, xyz)} - すべての"a"を"x"、"b"を"y"、"c"を"z"に置き換えます。
{{ITEM.VALUE}.tr(abc, xyzq)} - すべての"a"を"x"、"b"を"y"、"c"を"z"に置き換えます（"q"は無視されます）
{{ITEM.VALUE}.tr(abcde, xyz)} - すべての"a"を"x"、"b"を"y"、"c"を"z"、"d"を"z"、"e"を"z"に置き換えます（つまり、xyzzz）
{{ITEM.VALUE}.tr("\\\'", "\/\"")} - すべてのバックスラッシュをスラッシュに、シングルクォーテーションをダブルクォーテーションに置き換えます。
{{ITEM.VALUE}.tr(A-Z,a-z)} - すべての文字を小文字に変換します。
{{ITEM.VALUE}.tr(0-9a-z,*)} - すべての数字と小文字を"*"に置き換えます。
{{ITEM.VALUE}.tr(0-9,ab)} - すべての0を"a"に置き換え、すべての1、2、3、4、5、6、7、8、9を"b"に置き換えます。
{{ITEM.VALUE}.tr(0-9abcA-L,*)} - すべての数字、文字の"abc"およびA～Lの範囲を"*"に置き換えます。
{{ITEM.VALUE}.tr("\n","*")} - 改行文字を"*"に置き換えます。
{{ITEM.VALUE}.tr("e", "\n")} - すべての"e"を改行文字に置き換えます。
```

リテラル文字を含める場合:

```default
バックスラッシュ - \\ としてエスケープする必要があります。
シングルクォーテーション - \' としてエスケープする必要があります。
ダブルクォーテーション - \" としてエスケープする必要があります。
```

バックスラッシュでサポートされているエスケープシーケンス:

```default
\\\\ => \\ - 二重のバックスラッシュを単一のバックスラッシュに変換
\\a => \a - アラート
\\b => \b - バックスペース
\\f => \f - フォームフィード
\\n => \n - 改行
\\r => \r - リターン
\\t => \t - 水平タブ
\\v => \v - 垂直タブ
```

[comment]: # ({/f0be3d81-e91a391f})

[comment]: # ({ec9dd6cc-d8a53517})
##### uppercase {#uppercase}

マクロ値のすべての文字を大文字に変換します。  
この関数は、単一バイト文字セット（ASCII など）で動作し、UTF-8 はサポートしていません。  
この関数は Zabbix 7.0.4 以降でサポートされています。

例:

```default
{{ITEM.VALUE}.uppercase()} - "Zabbix Server" のような値を "ZABBIX SERVER"（大文字）に変換します
```

[comment]: # ({/ec9dd6cc-d8a53517})

[comment]: # ({98faa99f-4fb82e83})
##### urldecode {#urldecode}

URLエンコードされたマクロ値をデコードします。  
この関数は Zabbix 7.0.4 以降でサポートされています。

例:

```default
{{ITEM.VALUE}.urldecode()} - 「%2F」のような値をURLデコードして「/」にします
```

[comment]: # ({/98faa99f-4fb82e83})

[comment]: # ({8b7a9c23-8dec62fd})
##### urlencode {#urlencode}

マクロ値をURLエンコード形式にエンコードします。  
この関数は Zabbix 7.0.4 以降でサポートされています。

例:

```default
{{ITEM.VALUE}.urlencode()} - "/" のような文字を "%2F" にURLエンコードします
```

[comment]: # ({/8b7a9c23-8dec62fd})

[comment]: # ({a95b22c2-b6fdaa9a})
#### 追加の例

以下の表は、マクロ関数の使用例をさらに示しています。

:::noteinfo
`{#IFALIAS}` は [LLDマクロ](/manual/config/macros/lld_macros) であり、低レベルディスカバリのコンテキスト（ディスカバリルール、プロトタイプ、およびそれらから作成されたアイテム/トリガー）でのみ定義されます。  
LLD の外部でこれを使用すると、トークンは展開されません。
:::

|マクロ関数|受信した値|出力|
|-------------|----|-------------|
|`{{ITEM.VALUE}.regsub(^[0-9]+, Problem)}`|`123Log line`|`Problem`|
|`{{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")}`|`123 Log line`|`Problem`|
|`{{ITEM.VALUE}.regsub(".*", "Problem ID: \1")}`|`Log line`|`Problem ID: `|
|`{{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")}`|`MySQL crashed errno 123`|` Problem ID: MySQL_123 `|
|`{{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")}`|`123 Log line`|`*UNKNOWN*`（無効な正規表現）|
|`{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)}`|`customername_1`|`customername`|
|`{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)}`|`customername_1`|`1`|
|`{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)}`|`customername_1`|`{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)}` （無効な正規表現）|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"}`|`customername_1`|`{$MACRO:"customername"}`|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"}`|`customername_1`|`{$MACRO:"1"}`|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"}`|`customername_1`|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"}` （無効な正規表現）|
|`"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)}\"}"`|`customername_1`|`"{$MACRO:"\customername\"}"`|
|`"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)}\"}"`|`customername_1`|`"{$MACRO:"\1\"}"`|
|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}"`|`customername_1`|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}"` （無効な正規表現）|

##### アイテム値全体を表示する

テキスト/ログアイテムに対して解決された {ITEM.VALUE} および {ITEM.LASTVALUE} マクロの長い値は、一部のWebインターフェース上の場所では 20 文字に切り詰められます。  
これらのマクロの完全な値を表示するには、たとえば次のようにマクロ関数を使用できます。

```default
{{ITEM.VALUE}.regsub("(.*)", \1)}
{{ITEM.LASTVALUE}.regsub("(.*)", \1)}
```

参照: {ITEM.VALUE} および {ITEM.LASTVALUE} の [マクロの詳細](/manual/appendix/macros/supported_by_location)。

[comment]: # ({/a95b22c2-b6fdaa9a})


