在我的 Ruby 应用程序中,我有以下正则表达式,可以帮助我从日志中删除敏感信息:
/(\\"|")secure[^:]+:\s*\1.*?\1/
它在日志中有以下信息时起作用:
{"secure_data": "Test"}
但是当我在日志中有对象而不是字符串时,它不起作用:
{"secure_data": {"name": "Test"}}
如何更新正则表达式以适用于这两种情况?
在我的 Ruby 应用程序中,我有以下正则表达式,可以帮助我从日志中删除敏感信息:
/(\\"|")secure[^:]+:\s*\1.*?\1/
它在日志中有以下信息时起作用:
{"secure_data": "Test"}
但是当我在日志中有对象而不是字符串时,它不起作用:
{"secure_data": {"name": "Test"}}
如何更新正则表达式以适用于这两种情况?
以下应该适用于您正在尝试做的事情。不过,我建议使用 json 解析器。
{"secure[^:]*?:\s({?(?:(?:,[^"]*?)?"[^"]*?"(?::\s"[^"]*?")?)*?)*?}?}
使用此正则表达式,secure_data 中的对象也可能包含多个键值(字符串)对。它仍然会匹配。其他对象不会。
您可以将此正则表达式与否定字符类和替代项一起使用:
"secure[^:]+:\s*(?:"[^"]*"|{[^}]*})
在非捕获组(?:"[^"]*"|{[^}]*})
中,我们匹配带引号的字符串或以 开头{
和结尾的对象}
。