我有以下 Java 代码:
String initial = "Phone number: [194-582-9412]"; System.out.println(initial.replaceAll("\\d{3}\\-\\d{3}(?=\\-\\d{4})","XXX-XXX")); System.out.println(initial.replaceAll("\\d{3}\\-\\d{3}(?:\\-\\d{4})","XXX-XXX"));
产生输出:
电话号码:[XXX-XXX-9412]
电话号码:[XXX-XXX]
我的逻辑是找到 3 位数字、破折号、3 位数字(捕获到这一点)、破折号和四位数字(非捕获到这一点)。,以开头的前瞻组?=
是非捕获的。根据Pattern Javadoc,以开头的组?:
也是非捕获组。我期望两个正则表达式产生相同的输出,Phone number: [XXX-XXX-9412]
. 但是,具有非捕获组的正则表达式(?:\\-\\d{4})
似乎捕获了整个电话号码并替换它。为什么会这样?
呼唤远方
相关分类