求助:编写正则表达式捕获邮箱名及对应计数(适配Splunk)
解决Splunk中循环捕获邮箱与对应计数值的正则问题
原正则的问题分析
你的正则存在三个关键问题:
- 字符范围
[a-z\.]+只覆盖小写字母和点,样本里的大写字母(比如Protection、ABCpremier)匹配不到,导致后续邮箱无法被捕获。 - 正则末尾多了个多余的
],属于语法错误,会打断匹配逻辑。 - 未配置全局匹配模式,Splunk默认只提取第一个匹配项,所以只能拿到705。
修正后的正则表达式
(?<email>[A-Za-z0-9\.]+@test\.com)\s*(?<count>\d+)
正则说明
(?<email>[A-Za-z0-9\.]+@test\.com):命名捕获组email,匹配包含大小写字母、数字、点的邮箱前缀,@test\.com里的点做了转义(正则中点是通配符,必须转义才能匹配实际的点)。\s*:匹配邮箱和数值之间的任意空白字符(包括换行符、空格),兼容不同的换行格式。(?<count>\d+):命名捕获组count,匹配一个或多个数字,精准捕获计数值。
Splunk中的使用注意
在Splunk的rex命令里,需要加上max_match=0参数来开启全局匹配,这样就能捕获所有邮箱和对应计数值的配对:
your_base_search | rex max_match=0 "(?<email>[A-Za-z0-9\.]+@test\.com)\s*(?<count>\d+)"
另外,样本里的reassuredtest.com因为不符合@test.com的邮箱格式,会被这个正则自动忽略,如果你需要处理这类无效项,可以调整字符范围,但当前正则已经满足你“捕获有效邮箱+对应数值”的需求。
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

