我试图找到一个正则表达式,可以进行以下字符串匹配:
我有一个Windows DNS服务器调试日志中的DNS查找,如下所示:
(4)api3(7)central(6)sophos(3)com(0)
要在我们的SIEM解决方案中进行正确的解析,我想执行以下操作:
省略第一个和最后一个(数字),所以我得到:
api3(7)central(6)sophos(3)com
,然后将其余(数字)替换为。
如果只能匹配(数字),则可以用SIEM工具中的功能替换它们。
我已经使用过一些正则表达式,但是没有找到任何指向我解决方案的东西。我是regex的新手,所以也许我错过了一些东西。我已经可以用点替换所有(数字),但这很简单。
答案 0 :(得分:0)
此表达式可能满足您的第一个条件:
(\([0-9]+\))api3(\([0-9]+\))central(\([0-9]+\))sophos(\([0-9]+\))com(\([0-9]+\))
您也可以扩展它并添加/减少边界,就像这样:
(\([0-9]+\))(api3)\([0-9]+\)(central)\([0-9]+\)(sophos)\([0-9]+\)(com)\([0-9]+\)
然后将其替换为类似内容:
$2.$3.$4.$5
您可以在jex.im中可视化您的表情:
const regex = /(\([0-9]+\))(api3)\([0-9]+\)(central)\([0-9]+\)(sophos)\([0-9]+\)(com)\([0-9]+\)/gm;
const str = `(4)api3(7)central(6)sophos(3)com(0)`;
const subst = `$2.$3.$4.$5`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
您当然可以简化它。但是,为了安全起见,我添加了一些限制。
如果要捕获第一个和最后一个数字,只需将其匹配并替换为expression similar to this:
(\([0-9]+\))(.+)(\([0-9]+\))
然后,您可以简单地使用another expression捕获其他人:
(\([0-9]+\))