正则表达式语法

Hyade 适配器配置编辑器允许您使用正则表达式来描述应如何将日志文件转换为公共基本事件记录。下列各表是正则表达式用法的准则。

一般规则

正则表达式匹配

表达式 匹配
{n,m} 至少 n 次,但不超过 m
{n,} 至少 n
{n} 正好 n
* 0 次或多次
+ 1 次或多次
? 0 次或 1 次
. 圆括号中的正则表达式中除了 \n 之外的任何内容
^ 与圆括号中的正则表达式中的字符串或行的开头(例如,紧跟在换行符后面的位置或正好在字符串开头之前的位置)匹配的空标记
$ 与圆括号中的正则表达式中的字符串或行的末尾(即,正好在换行符之前的位置或紧跟在字符串末尾的位置)匹配的空标记
\b 字符类中的退格([abcd])
\b 与字边界(一边是 \w,另一边是 \W)匹配的空标记
\B 与不是字边界的边界匹配的空标记
\A 只出现在字符串开头
\Z 只出现在字符串末尾(或末尾的换行符之前)
\ 换行符
\r 回车符
\t 制表符
\f 换页符
\d 数字 [0-9]
\D 非数字 [^0-9]
\w 字字符 [0-9a-z_A-Z]
\W 非字字符 [^0-9a-z_A-Z]
\s 空格字符 [ \t\n\r\f]
\S 非空格字符 [^ \t\n\r\f]
\xnn 字符 nn 的十六进制表示
\cD 对应的控制字符
\nn\nnn 除非字符 nn 是后引用,否则是该字符的八进制表示。
\1, \2, \3 ... 无论第一项、第二项和第三项等等的内容是什么,用括号括起来的组都匹配。这称为后引用。如果没有对应的组,则将数字解释为字符的八进制表示。
\0 空字符。其它任何带反斜杠的字符都与它自身匹配。
*? 0 次或多次
+? 1 次或多次
?? 0 次或 1 次
{n}? 正好 n
{n,}? 至少 n
{n,m}? 至少 n 次,但不超过 m

分组和抽取匹配

要对表达式的各个部分进行分组,使用元字符 ( )。这允许将圆括号中的正则表达式视作一个单元。例如,正则表达式

severity:(1|2)
与模式 severity:1 或 severity:2 匹配。

要抽取已通过使用分组元字符匹配的字符串的各个部分,使用特殊变量 $1 和 $2 等等。

# Extract the name and URL from $pattern = <a href="secure_logon.html">Logon form</a>
$pattern =~ <a href=\"(.*)\">(.*)</a> ; # match using grouping
$url = $1;                # $1 equals secure_logon.html
$pagename = $2;           # $2 equals Logon form

Perl 5 扩展正则表达式

表达式 匹配
(?#text) 导致忽略 text 的嵌入式注释。
(?:regexp) 对诸如“()”之类的内容进行分组,但是不会导致保存组匹配。
(?=regexp) 零宽度正预先断言。例如,\w+(?=\s) 与后跟空格的字(MatchResult 中不包括空格)匹配
(?!regexp) 零宽度负预先断言。例如,foo(?!bar) 与后面不跟 bar 的任何 foo 匹配。这是零宽度断言,它表明 a(?!b)dad 匹配,因为 a 后跟不是 bd)的字符且 d 遵循零宽度断言。
(?imsx) 一个或多个嵌入式模式匹配修饰符:
i 启用不区分大小写
m
启用输入的多行处理
s
启用输入的单行处理
x
启用扩展的空格注释

相关概念
Hyades 通用日志适配器概述
公共基本事件格式规范

相关任务
创建日志解析器
创建基于规则的适配器
创建静态适配器

相关参考
适配器配置文件结构
公共基本事件格式规范
适配器配置编辑器
正则表达式语法