0

在我的 Ruby 应用程序中,我有以下正则表达式,可以帮助我从日志中删除敏感信息:

/(\\"|")secure[^:]+:\s*\1.*?\1/

它在日志中有以下信息时起作用:

{"secure_data": "Test"}

但是当我在日志中有对象而不是字符串时,它不起作用:

{"secure_data": {"name": "Test"}}

如何更新正则表达式以适用于这两种情况?

https://rubular.com/r/h9EBZot1e7NUkS

4

2 回答 2

1

以下应该适用于您正在尝试做的事情。不过,我建议使用 json 解析器。

{"secure[^:]*?:\s({?(?:(?:,[^"]*?)?"[^"]*?"(?::\s"[^"]*?")?)*?)*?}?}

使用此正则表达式,secure_data 中的对象也可能包含多个键值(字符串)对。它仍然会匹配。其他对象不会。

于 2020-01-03T08:50:39.587 回答
1

您可以将此正则表达式与否定字符类和替代项一起使用:

"secure[^:]+:\s*(?:"[^"]*"|{[^}]*})

在非捕获组(?:"[^"]*"|{[^}]*})中,我们匹配带引号的字符串或以 开头{和结尾的对象}

更新正则表达式演示

于 2020-01-03T10:26:04.157 回答