支持的正则表达式(regex)语法 - Amazon CloudWatch 日志

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

支持的正则表达式(regex)语法

当您需要超出精确文本匹配范围的灵活模式匹配时,请使用正则表达式。正则表达式在以下方面特别有用:

  • 可变格式:匹配 IP 地址、时间戳或 IDs 使用不同的格式

  • 部分匹配:查找文本中任意位置包含特定模式的日志条目

  • 复杂条件:匹配值范围、可选字符或替代拼写

例如,用于%\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}%匹配任何 IP 地址格式,或者%[Ee]rror|[Ff]ail%在日志中同时捕获 “错误”/“错误” 和 “Fail”/“fail”。

您可以使用 % 括起来的正则表达式模式(正则表达式模式前后有百分号)来匹配日志事件中的字词。以下示例显示了返回所有包含 AUTHORIZED 关键字的日志事件筛选模式:

%AUTHORIZED%

此过滤器模式返回日志事件消息,例如:

  • [ERROR 401] UNAUTHORIZED REQUEST

  • [SUCCESS 200] AUTHORIZED REQUEST

展开以下部分,查看有关 CloudWatch 日志筛选模式中支持的特定正则表达式运算符和语法规则的详细信息。

使用正则表达式搜索和筛选日志数据时,必须用 % 将表达式括起来。

使用正则表达式的筛选条件模式只能包括以下内容:

  • 字母数字字符 – 字母数字字符是字母(从 A 到 Z 或 a 到 z)或数字(从 0 到 9)字符。

  • 支持的符号字符-这些字符包括::_'、' # '、'、= '、@'、'、/'、; '、'、, '和' - '。例如,%something!% 会被拒绝,因为不支持“!”。

  • 支持的运算符 – 这些运算符包括:“^”、“$”、“?”、“[”、“]”、“{”、“}”、“|”、“\”、“*”、“+”和“.”。

不支持 () 运算符。不能使用括号来定义子模式。

不支持多字节字符。

注意

配额

在创建指标筛选条件或订阅筛选条件时,每个日志组最多有 5 个包含正则表达式的筛选条件模式。

为指标筛选条件和订阅筛选条件创建带分隔符的筛选条件模式或 JSON 筛选条件模式,或者筛选日志事件或 Live Tail 时,每个筛选条件模式的正则表达式限制为 2 个。

支持的运算符的使用

  • ^:将匹配项锚定到字符串的开头。例如,%^[hc]at% 匹配“hat”和“cat”,但仅在字符串的开头。

  • $:将匹配项锚定到字符串的结尾。例如,%[hc]at$% 匹配“hat”和“cat”,但仅在字符串的结尾。

  • ?:匹配前一个术语的零次或一次出现。例如,%colou?r% 可以同时匹配“color”和“colour”。

  • []:定义字符类。匹配方括号内包含的字符列表或字符范围。例如,%[abc]% 匹配“a”、“b”或“c”;%[a-z]% 匹配从“a”到“z”的任何小写字母;%[abcx-z]% 匹配 “a”、“b”、“c”、“x”、“y”或“z”。

  • {m, n}:与前面的字词匹配至少 m 次且不超过 n 次。例如,%a{3,5}% 仅匹配“aaa”、“aaaa”和“aaaaa”。

    注意

    如果您选择不定义最小值或最大值,则可以省略 mn

  • |:布尔值“Or”,与竖线两侧的字词相匹配。例如:

    • %gra|ey%可以匹配 “灰色” 或 “灰色”

    • %^starting|^initializing|^shutting down%可以匹配 “开始... “,或 “正在初始化... “,或 “正在关闭”,但与 “跳过初始化...” 不匹配

    • %abcc|ab[^c]$可以匹配 “abcc...” 和 “aba...” 但无法匹配 “aac...”

  • \:转义字符,允许您使用运算符的字面含义而不是其特殊含义。例如,%\[.\]% 匹配任何由“[”和“]”括起来的单个字符,因为方括号已转义,例如“[a]”、“[b]”、“[7]”、“[@]”、“[]]”和“[ ]”。

    注意

    %10\.10\.0\.1% 是创建正则表达式来匹配 IP 地址 10.10.0.1 的正确方法。

  • *:匹配前面字词的零个或多个实例。例如, %ab*c% 可以匹配“ac”、“abc”和“abbbc”;%ab[0-9]*% 可以匹配“ab”、“ab0”和“ab129”。

  • +:匹配前面字词的一个或多个实例。例如,%ab+c% 可以匹配“abc”、“abbc”和“abbbc”,但不匹配“ac”。

  • .:匹配任意单个字符。例如,%.at% 匹配以“at”结尾的任意三个字符串,包括“hat”、“cat”、“bat”、“4at”、“#at”和“ at”(以空格开头)。

    注意

    在创建正则表达式以匹配 IP 地址时,转义 . 运算符很重要。例如,%10.10.0.1% 可能匹配“10010,051”,这可能不是表达式的实际预期用途。

  • \d\D:匹配数字/非数字字符。例如,%\d% 等同于 %[0-9]%%\D% 等同于 %[^0-9]%

    注意

    大写运算符表示其小写对应运算符的逆运算符。

  • \s\S:匹配空格字符/非空格字符。

    注意

    大写运算符表示其小写对应运算符的逆运算符。空格字符包括制表符 (\t)、空格 ( ) 和换行符 (\n)。

  • \w\W:匹配字母数字字符/非字母数字字符。例如,%\w% 等同于 %[a-zA-Z_0-9]%%\W% 等同于 %[^a-zA-Z_0-9]%

    注意

    大写运算符表示其小写对应运算符的逆运算符。

  • \xhh:匹配两位十六进制字符的 ASCII 映射。\x 是转义序列,表示以下字符代表 ASCII 的十六进制值。hh 指定指向 ASCII 表中字符的两个十六进制数字(0-9 和 A-F)。

    注意

    您可以使用 \xhh 匹配筛选条件模式不支持的符号字符。例如,%\x3A% 匹配 :%\x28% 匹配 (