- 论坛徽章:
- 0
|
回复 2# rdcwayx
首先感谢版主耐心、细致解答,其次为确保我正确理解了版主的意思,需要与你再确认一些细节。
1、
这个例子中, .*Serv 是起始部分 (也就是Serv 前的所有字符包括Serv), . \(.*\) \[.* 是最后的部分,.(任意字符) [任意字符
"%msg:R:.*Sev:. \(.*\) \[.*--end%"
我的理解是消息截断形式是:如果匹配到正则表达式".*Sev.*. \(.*\) \[.*",那么"msg"值为匹配到的字符串,实际上原始内容,因为是以".*"作为开始、结束符;没有匹配到则是空,也就是是该消息不处理。需要注意的是我用红色标注".*"标识中间出现的字符串,可能有字符串,也可能没有
2、
这个例子里, R说明是regex ,格式是ERE (extended regex), 第一个1 是submatch,FIELD 是 nonmatch,第二个 1 是匹配数,1代表第二次匹配。
“%msg:R,ERE,1,FIELD,1:for (vlan[0-9]\*):--end%”
我的理解是:正则表达式支持小括号"("、")",每对小括号标记的正则表达式表示一个"submatch",也就是例子中的第一个数字"1",而一个完整的消息可以有多个子串匹配到正则表达式,也就是第二个数字"1"。字符串的替换的规则是:如果消息与表达式匹配,那么返回的内容是第二个匹配到的子串内容,否则返回的原始消息内容。
请问,我的理解是否有问题,谢谢!
|
|