如何使用CloudWatch Insights Regex对don';t在第一次匹配后返回,但返回一个集合

如何使用CloudWatch Insights Regex对don';t在第一次匹配后返回,但返回一个集合,regex,amazon-web-services,amazon-cloudwatch,amazon-cloudwatchlogs,Regex,Amazon Web Services,Amazon Cloudwatch,Amazon Cloudwatchlogs,我的CloudWatch日志中有许多行是JSON对象,如下所示: { "friends": [ { "name": "bob"}, { "name": "steve"}, { "name": "joe" } ] } 使用CloudWatch正则表达式,我想提取所有名称。 我已经有一个正则表达式,它返回我想要的值: /“name”:[]*“([^”]*)”/g 正如您在该链接中看到的: 使用CloudWatch语法,该正则表达式成

我的CloudWatch日志中有许多行是JSON对象,如下所示:

{
    "friends": [
        { "name": "bob"},
        { "name": "steve"},
        { "name": "joe" }
    ]
}
使用CloudWatch正则表达式,我想提取所有名称。 我已经有一个正则表达式,它返回我想要的值:

/“name”:[]*“([^”]*)”/g
正如您在该链接中看到的:

使用CloudWatch语法,该正则表达式成为以下命令:

fields @message
| filter @message like /"friends":/
| parse @message /"name":[ ]*"(?<@name>[^"]*)"/
fields@message
|筛选@message like/“friends”:/
|解析@message/“name”:[]*“(?[^”]*)”/
但是这个表达式在示例中只返回名字“bob”。我想把它们都买下来。我曾尝试在表达式末尾添加
/g
,但没有效果。我试图在官方文件中找到一些信息,但我找不到任何与此相关的信息


在中有一个类似的问题,但其中一个没有使用parse命令,也没有答案。

对于数量有限且众所周知的子节点,我可以找到一种非常丑陋的方法:

fileds @message
| filter @message like /"friends":/
| parse @message /"name":[ ]*"(?<@name1>[^"]*)"/
| parse @message /"name"(?:(?!"name")(.|\n))+]*"name":[ ]*"([?<@name2>^"]*)/
| parse @message /"name"(?:(?!"name")(.|\n))+]*"name"(?:(?!"name")(.|\n))+]*"name":[ ]*"(?<@name3>[^"]*)/ 
fileds@message
|筛选@message like/“friends”:/
|解析@message/“name”:[]*“(?[^”]*)”/
|解析@message/“name”(?:(?!“name”)(.|\n))+]*“name:[]*”([?^“]*)/
|解析@message/“name”(?:(?!“name”)(.|\n))+]*“name”(?:(?!“name”)(.|\n))+]*“name:[]*”(?[^“]*)/
基本上,它说:搜索name关键字,然后继续搜索任何不是name关键字的内容,然后在第二个name关键字后面的引号中提取所有内容。类似于
@name3
,但现在跳到关键字。你可以在这个链接中使用这个正则表达式

只需稍加努力,就可以将它们组合成一个巨大的正则表达式


这不是我一直在寻找的解决方案。但它可能对某些人有用。

这里有一个类似的正则表达式版本,但阅读起来更好一些:
((?:(?!“name”)(.|\n))+]*{2}“name”:[]*([^“]*)
`