[comment]: # translation:outdated

[comment]: # ({4090c2d5-0458cee0})
# 1 宏函数

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

[comment]: # ({6d8ec083-4aba217d})
#### 概述

宏函数提供了能自定义 [宏](/zh/manual/config/macros) 值的功能。

有时宏可能会解析为一个不一定易于处理的值。它可能很长，或包含你想提取的感兴趣的特定子字符串。那么此时宏函数就发挥了作用。

宏函数的语法为：

    {<macro>.<func>(<params>)}

其中：

-   <macro> - 为要自定义的宏（例如 {ITEM.VALUE} 或 {\#LLDMACRO}）
-   <func> - 要应用的函数
-   <params> - 以逗号分隔的函数参数列表。如果他们以'' '' (空格),
    `"` 或者包含 `)`, `,`这些符号开头，则必须用引号括起来。

例如：

    {{ITEM.VALUE}.regsub(pattern, output)}
    {{#LLDMACRO}.regsub(pattern, output)}

[comment]: # ({/6d8ec083-4aba217d})

[comment]: # ({f02ad715-077c9a88})
#### 可支持的宏函数

|函数|<|<|<|<|
|------|-|-|-|-|
|<|**描述**                                             *|参数**                                                                                **可|持于**|<|
|**regsub** (<pattern>,<output>)|<|<|<|<|
|<|通过正则表达式匹配提取的子字符串（区分大小写）。     **pattern** - 匹配的正则表达式<br>|{ITEM.VALUE}<br>**output** - 输出的选项。支持 **\\1 - \\9** 占位符来匹配组。 **\\0** 返回匹配的文本。   {ITEM.LASTVALUE}<br>|<[低级别发现宏](/zh/manual/config/macros/lld_macros) （除了在低级别发现规则过滤器中）|<|
|**iregsub** (<pattern>,<output>)|<|<|<|<|
|<|通过正则表达式匹配提取的子字符串（不区分大小写）。   **pattern** - 匹配的正则表达式<br>|{ITEM.VALUE}<br>**output** - 输出的选项。支持 **\\1 - \\9** 占位符来匹配组。 **\\0** 返回匹配的文本。   {ITEM.LASTVALUE}<br>|<[低级别发现宏](/zh/manual/config/macros/lld_macros) （除了在低级别发现规则过滤器中）|<|

如果在 [受支持的位置](/zh/manual/appendix/macros/supported_by_location)
使用函数，但是应用于不支持宏函数的宏，那么宏的计算结果为'未知'。

如果pattern不是一个正确的正则表达式，那么宏的计算结果为'未知'(低级别发现宏除外，在这种情况下，函数将被忽略，宏将保持未展开)

如果宏函数应用于不支持宏函数的位置的宏，那么该函数将被忽略。

[comment]: # ({/f02ad715-077c9a88})

[comment]: # ({495ffddf-d674d268})
#### 示例

下面的例子说明了宏函数用于自定义宏值的方法，这些宏值包含“日志行”作为接收值:

|接收值                      宏|输出|<|
|----------------------------------|------|-|
|`123Log line`|`{{ITEM.VALUE}.regsub(^[0-9]+, Problem)}`|`Problem`|
|`123 Log line`|`{{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")}`|`Problem`|
|`123 Log line`|`{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)}`|`Problem ID: 123`|
|`Log line`|`{{ITEM.VALUE}.regsub(".*", "Problem ID: \1")}`|''Problem ID: ''|
|`MySQL crashed errno 123`|`{{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")}`|'' Problem ID: MySQL\_123 ''|
|`123 Log line`|`{{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")}`|`*UNKNOWN*` (无效的正则表达式)|
|`customername_1`|`{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)}`|`customername`|
|`customername_1`|`{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)}`|`1`|
|`customername_1`|`{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)}`|`{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)}` (无效的正则表达式)|
|`customername_1`|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"}`|`{$MACRO:"customername"}`|
|`customername_1`|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"}`|`{$MACRO:"1"}`|
|`customername_1`|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"}`|`{$MACRO:"{{#M}.regsub(\"(.*)_([0-9]+\", \1)}"}` (无效的正则表达式)|
|`customername_1`|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \1)}\"}"`|`"{$MACRO:\"customername\"}"`|
|`customername_1`|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \2)}\"}"`|`"{$MACRO:\"1\"}")`|
|`customername_1`|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}"`|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}")` (无效的正则表达式)|

[comment]: # ({/495ffddf-d674d268})
