regex 使用正则表达式屏蔽xml标记值

rks48beu  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(158)

输入-

String s = "<Name1>Edward Smith</Name1>";

已尝试执行以下操作以屏蔽使用

System.out.println(s.replaceAll("<Name1>(.{5})(?:.+?)</Name1>", "<Name1>*****$1</Name1>"));

但上面的代码掩码如下

<Name1>*****Edwar</Name1>

预期输出:

<Name1>*****d Smith</Name1>

只想屏蔽前五个字符,其余字符串应保持原样。
对于小于或等于5个字符,输出应为Number of chars masked.。

<Name1>*****</Name1>

任何帮助将不胜感激,提前感谢..

hvvq6cgz

hvvq6cgz1#

试试这个:

System.out.println(s.replaceAll("<Name1>(.{1,5})(.*)</Name1>", "<Name1>*****$2</Name1>"));

更多说明here

编辑以下是跟踪掩码字符计数的代码:

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

public class RegexXmlRplc {
    private static Pattern pattern = Pattern.compile("<Name1>(.{1,5})(.*)</Name1>");

    public static void main(String[] args) {
        String s = "<Name1>joe</Name1>";
        mask(s);
        s = "<Name1>Edward Smith</Name1>";
        mask(s);

    }

    private static void mask(String s) {
        Matcher matcher = pattern.matcher(s);
        if (matcher.find()) {
            int length = matcher.group(1).length();
            String replacement = "<Name1>" + "*".repeat(length) + "$2</Name1>";
            System.out.println(matcher.replaceAll(replacement));
        } else {
            System.out.println("No match");
        }
    }
}

相关问题