使用正则表达式屏蔽字符串的一部分



这个想法是屏蔽一个字符串,就像用信用卡一样。它可以通过这一行代码来完成。它有效。但是,我找不到在这种情况下使用的正则表达式的任何直接解释。

public class Solution {
public static void main(String[] args) {
String t1 = "518798673672531762319871";
System.out.println(t1.replaceAll(".(?=.{4})", "*"));
}
}

输出为:********************9871

正则表达式的解释

.(?=.{4})
  • .:匹配任何字符
  • (?=: 前瞻条件的开始
    • .{4}:断言存在 4 个字符
  • ): 前瞻条件结束

简而言之,它匹配输入中当前位置右侧有 4 个字符的任何字符。

替换是"*"这意味着对于 inout 中的每个匹配字符,替换为单个*字符,从而在前瞻条件匹配失败时替换信用卡号中除最后 4 个字符之外的所有字符(因为我们在当前位置之前不会有 4 个字符(。

阅读更多关于在正则表达式中环顾四周的信息

?=.{4}

是一个积极的展望。 它匹配括号内的模式(当前字符之后的后 4 位数字(,而不将其包含在与所有其他字符匹配以替换为 * 的主结果(括号外的.(中

假设您的正则表达式逐个字符遍历输入字符。在第一个数字 (5( 上,它询问"是否有一个字符后跟 4 个其他字符?是的,好的..将 [5] 替换为 *">

它重复此操作,直到 9(从末尾开始第 4 个,此时"在此之后还有 4 个字符吗?"问题变为"否"并且替换停止

最新更新