我有以下 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})似乎捕获了整个电话号码并替换它。为什么会这样?
呼唤远方
相关分类