当前位置: 首页 > 知识库问答 >
问题:

在日志返回中替换多个值

汤跃
2023-03-14
%replace(  %replace(%msg){'regex1', 'replacement1'}  ){'regex2', 'replacement2'}
%replace(%replace(%replace(%msg){"first_name='.*'", "first_name='xxxxx'"}){"last_name='.*'", "last_name='yyyyyy'"}){"password='.*'", "password='zzzzzz'"}%n

1)当语句按此顺序时,可以:

已执行:

UPDATE usertest.users SET password='secret_pw', last_name='Smith', first_name='John' where user_id = 1745;

已记录:

UPDATE usertest.users SET password=zzzzzz, last_name=yyyyyy, first_name=xxxxx where user_id = 1745;
UPDATE usertest.users SET password='secret_pw', first_name='John', last_name='Smith' where user_id = 1745;
UPDATE usertest.users SET password=zzzzzz, first_name=xxxxx where user_id = 1745;
UPDATE usertest.users SET last_name='Smith', password='secret_pw', first_name='John' where user_id = 1745;
UPDATE usertest.users SET last_name=yyyyyy, first_name=xxxxx where user_id = 1745;

有人能告诉你为什么会发生这种情况,如何修复它,或者有什么其他方法可以解决吗?

共有1个答案

郁和通
2023-03-14

这是regex模式的一个问题,因为它比预期的要多,所以替换项会互相覆盖。

我复制了您看到的问题,然后更改了regex以只包含字母数字(\w而不是。)因此模式如下所示:

%replace(  %replace(  %replace(%msg){"first_name='\w*'", "first_name='xxxxx'"}  ){"last_name='\w*'", "last_name='yyyyyy'"}  ){"password='\w*'", "password='zzzzzz'"}%n

以下是一些测试:

UPDATE usertest.users SET password='secret_pw', last_name='Smith', first_name='John' where user_id = 1745;
UPDATE usertest.users SET last_name='Smith', first_name='John', password='secret_pw' where user_id = 1745;
UPDATE usertest.users SET first_name='John', password='secret_pw', last_name='Smith' where user_id = 1745;
UPDATE usertest.users SET first_name='John', last_name='Smith', password='secret_pw' where user_id = 1745;
Received: QUERY UPDATE usertest.users SET password='zzzzzz', last_name='yyyyyy', first_name='xxxxx' where user_id = 1745;[pageSize = 100], v=4/v4
Received: QUERY UPDATE usertest.users SET last_name='yyyyyy', first_name='xxxxx', password='zzzzzz' where user_id = 1745;[pageSize = 100], v=4/v4
Received: QUERY UPDATE usertest.users SET first_name='xxxxx', password='zzzzzz', last_name='yyyyyy' where user_id = 1745;[pageSize = 100], v=4/v4
Received: QUERY UPDATE usertest.users SET first_name='xxxxx', last_name='yyyyyy', password='zzzzzz' where user_id = 1745;[pageSize = 100], v=4/v4
 类似资料:
  • 我有一个Spring Rest控制器,可以满足以下要求: 我想在日志中将我的12223334455号替换为1******4455号,我已经为其制定了一个方法: 但这个请求并不是在句柄中,而是在控制器内部的某个地方。使用该方法屏蔽我的号码的最佳方法是什么?

  • 问题内容: 一个非常简单的小问题,但是我不太明白该怎么做。 我需要将’_’的每个实例替换为空格,并将’#’的每个实例替换为空/空。 我已经试过了: 我真的不喜欢这样的链接命令。还有另一种方法可以做到这一点吗? 问题答案: 使用OR运算符(): 您还可以使用字符类: Fiddle 如果您想用一件事替换哈希值,而用另一件事替换下划线,则只需要链接即可。但是,您可以添加一个原型: 但是为什么不连锁呢?我

  • 我真的不喜欢这样链接命令。有没有另一种方法在一个做?

  • 问题内容: 我试图在 JavaScript中 返回两个值。这可能吗? 问题答案: 否,但是您可以返回一个包含您的值的数组: 然后,您可以像这样访问它们: 使用最新的ECMAScript 6语法 *,您还可以更直观地分解返回值: 如果要在每个返回值上贴上“标签”(易于维护),则可以返回一个对象: 并访问它们: 或使用ES6语法:

  • 问题内容: 序言:我知道使用列表或其他集合来返回结果,但是随后我必须遍历列表以将结果取出:请参阅第二个示例 前言2:我正在寻找“ Java不支持…”之外的答案。 我正在寻找一种从Java方法调用返回多个对象的便捷方法。 有点像PHP: 我真的厌倦了在参数中传递持有者对象,例如: 然后: 如果有人想出一种优雅的方法来解决这个问题,那将非常有兴趣。 使用清单 这有两个缺点: 我必须先将清单装在房子的被

  • 问题内容: 如何将值更改为和将值更改为? 当我使用和所有值都更改为最后一个数组值。例: 结果: 问题答案: 这应该为您工作: 输出: 检出此DEMO:http : //codepad.org/b0dB95X5