Java正则掩码含逗号字段:如何匹配字段结束逗号实现完整掩码
解决方案:处理含逗号的字段掩码正则
问题分析
原正则field\s*=\s*([^,]*)的问题在于[^,]*仅匹配非逗号字符,遇到字段值内的逗号就会提前终止匹配,导致仅掩码了逗号前的部分内容,剩余未匹配的部分被保留下来。
正确正则模式
要匹配整个字段值(包括内部的逗号),直到字段结束的逗号为止,可使用贪婪匹配结合正向预查:
field\s*=\s*(.*)(?=,)
Java代码示例
String input = "field=I'm graduated from Comsats, Sahiwal,"; // 将匹配到的字段值替换为6个星号 String maskedInput = input.replaceAll("field\\s*=\\s*(.*)(?=,)", "field=******"); System.out.println(maskedInput); // 输出:field=******,,
正则解释
field\s*=\s*:匹配字段名field、等号,同时兼容等号前后的任意空白字符(.*):贪婪匹配任意字符(包括逗号),直到满足后续的正向预查条件(?=,):正向预查,确保匹配的内容后面紧跟一个逗号(即字段结束的标识)
兼容无结尾逗号的场景
如果字段可能出现在字符串末尾(没有结尾逗号),可调整正则以兼容两种情况:
field\s*=\s*(.*?)(?=,|$)
对应的代码示例:
String regex = "field\\s*=\\s*(.*?)(?=,|$)"; // 带结尾逗号的输入 String inputWithComma = "field=I'm graduated from Comsats, Sahiwal,"; // 不带结尾逗号的输入 String inputWithoutComma = "field=I'm graduated from Comsats, Sahiwal"; String outputWithComma = inputWithComma.replaceAll(regex, "field=******"); String outputWithoutComma = inputWithoutComma.replaceAll(regex, "field=******"); System.out.println(outputWithComma); // field=******,, System.out.println(outputWithoutComma); // field=******
内容的提问来源于stack exchange,提问作者Amna Zahid
相关产品推荐
相关产品推荐

