字符串中正则提取key-value键值对

779 阅读1分钟

作用

在使用日志打印时,存在很多的敏感信息。针对这些特殊的数据,需要做出脱敏处理。而且下面的正则表达式则可以提取出日志信息中的key-value键值对,然后对指定的key做出信息脱敏,这样就可以保证日志数据的安全性。

日志脱敏实现

正则表达式


public static final Pattern REGEX_PATTERN = Pattern.compile("\\s*([\"]?[\\w]+[\"]?)(\\s*[:=]+[^\\u4e00-\\u9fa5@,.*{\\[\\w]*\\s*)([\\u4e00-\\u9fa5_\\-@.\\w]+)[\\W&&[^\\-@.]]?\\s*");


代码案例



import com.alibaba.fastjson.JSON;
import org.example.properties.AccountProperties;
import org.junit.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 苦瓜不苦
 * @date 2022/11/2 15:02
 **/
public class RegexTest {

    // 正则匹配模式 - 该正则表达式第三个()可能无法匹配以某些特殊符号开头和结尾的(如果像密码这种字段,前后如果有很多特殊字段,则无法匹配)
    public static final Pattern REGEX_PATTERN = Pattern.compile("\\s*([\"]?[\\w]+[\"]?)(\\s*[:=]+[^\\u4e00-\\u9fa5@,.*{\\[\\w]*\\s*)([\\u4e00-\\u9fa5_\\-@.\\w]+)[\\W&&[^\\-@.]]?\\s*");


    @Test
    public void test() {

        AccountProperties properties = new AccountProperties();
        properties.setPrivateKey("我寄愁心与明月");
        properties.setPublicKey("随风直到夜郎西");

        String pojoString = properties.toString();
        String jsonString = JSON.toJSONString(properties);

        matchKeyValue(pojoString);
        matchKeyValue(jsonString);


    }

    /**
     * 正则匹配方法
     *
     * @param content
     */
    private static void matchKeyValue(String content) {
        Matcher matcher = REGEX_PATTERN.matcher(content);
        while (matcher.find()) {
            // group(1)就是key,group(2)就是分隔符(如:和=),group(3)就是value
            System.err.println(matcher.group());
            System.err.println(matcher.group(1));
            System.err.println(matcher.group(2));
            System.err.println(matcher.group(3));
        }
    }

}