

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# parse
<a name="CWL_QuerySyntax-Parse"></a>

 使用 `parse` 从日志字段中提取数据并创建可以在查询中处理的提取字段。**`parse`**  同时支持使用通配符和正则表达式的 glob 模式。有关正则表达式语法的信息，请参阅 [支持的正则表达式（regex）语法](FilterAndPatternSyntax.md#regex-expressions)。

 您可以使用正则表达式解析嵌套的 JSON 字段。

**示例：解析嵌套的 JSON 字段**

 该代码片段显示了如何解析在摄取过程中展平的 JSON 日志事件。

```
{'fieldsA': 'logs', 'fieldsB': [{'fA': 'a1'}, {'fA': 'a2'}]}
```

 该代码片段显示了一个带有正则表达式的查询，其将提取 `fieldsA` 和 `fieldsB` 的值以创建提取字段 `fld` 和 `array`。

```
parse @message "'fieldsA': '*', 'fieldsB': ['*']" as fld, array
```

**已命名的捕获组**

配合正则表达式一起使用 **`parse`** 时，可以使用已命名的捕获组将模式捕获到字段中。语法为 `parse @message (?<Name>pattern)`。

下面的示例使用 VPC 流日志上的一个捕获组将 ENI 提取到名为“`NetworkInterface`”的字段中。

```
parse @message /(?<NetworkInterface>eni-.*?) / | display NetworkInterface, @message
```

**注意**  
 JSON 日志事件在摄取过程中会被展平。目前，不支持使用 glob 表达式解析嵌套的 JSON 字段。您只能解析所含日志事件字段数不超过 200 的 JSON 日志事件。解析嵌套的 JSON 字段时，必须格式化查询中的正则表达式，使其与 JSON 日志事件的格式匹配。

## 解析命令的示例
<a name="CWL_QuerySyntax-parse-examples"></a>

**使用 glob 表达式来从日志字段 `@message` 提取字段 `@user`、`@method` 和 `@latency`，并对于 `@method` 和 `@user` 的每个唯一组合返回平均延迟。**

```
parse @message "user=*, method:*, latency := *" as @user,
    @method, @latency | stats avg(@latency) by @method,
    @user
```

**使用正则表达式从日志字段 `@message` 提取字段 `@user2`、`@method2` 和 `@latency2`，并对于 `@method2` 和 `@user2` 的每个唯一组合返回平均延迟。**

```
parse @message /user=(?<user2>.*?), method:(?<method2>.*?),
    latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, 
    @user2
```

**提取字段 `loggingTime`、`loggingType` 和 `loggingMessage`，筛选出包含 `ERROR` 或 `INFO` 字符串的日志事件，然后仅显示包含 `ERROR` 字符串的事件的 `loggingMessage` 和 `loggingType` 字段。**

```
FIELDS @message
    | PARSE @message "* [*] *" as loggingTime, loggingType, loggingMessage
    | FILTER loggingType IN ["ERROR", "INFO"]
    | DISPLAY loggingMessage, loggingType = "ERROR" as isError
```