gpt4 book ai didi

Java字符串替换-非捕获组捕获

转载 作者:行者123 更新时间:2023-12-02 09:34:26 25 4
gpt4 key购买 nike

我有以下 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"));

产生输出:

Phone number: [XXX-XXX-9412]
Phone number: [XXX-XXX]

我的逻辑是找到 3 个数字、一个破折号、3 个数字(捕获到这一点)、一个破折号和 4 个数字(未捕获到这一点)。根据this tutorial ,以 ?= 开头的先行组是非捕获的。根据the Pattern Javadoc ,以 ?: 开头的组也是非捕获的。我希望两个正则表达式产生相同的输出,电话号码:[XXX-XXX-9412]。但是,具有非捕获组 (?:\\-\\d{4}) 的正则表达式似乎捕获了整个电话号码并将其替换。为什么会发生这种情况?

最佳答案

您实际上可以使用捕获组做您想做的事情。在这里,它捕获您想要保留的部分并替换整个字符串。 $1 是对捕获组的反向引用。

 System.out.println(
initial.replaceAll("\\d{3}-\\d{3}(\\-\\d{4})", "XXX-XXX$1"));

我想您已经意识到,如果regex不匹配,则返回原始字符串而不做任何更改。

关于Java字符串替换-非捕获组捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57664760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com