gpt4 book ai didi

java - 匹配正则表达式但只替换第一部分 - Java

转载 作者:行者123 更新时间:2023-11-30 08:47:59 24 4
gpt4 key购买 nike

我正在尝试使用 +44 或 +4 后跟任意数量的数字或连字符格式的电话号码,并将 +44 或 +4 替换为 +44 或 +4 后跟空间。

我相信我需要环顾四周以匹配完整号码但只替换初始前缀,我正在尝试的 atm 是

^[+]\d[0-9](?:([0-9]+))?

它匹配数字(没有连字符)但是我认为前瞻只会匹配数字而不捕获额外的数字但是它似乎捕获了整个东西。

谁能指出我做错了什么的正确方向?

编辑:更清楚地说,我的 Java 代码是

Pattern pattern = Pattern.compile("^[+]\\d[0-9](?:([0-9]+))?");
if(pattern.matcher("+441234567890").matches())
String num = pattern.matcher(title).replaceFirst("$0 $1");

谢谢。

最佳答案

如果你想匹配整个数字,但只替换它的一部分,你不应该使用积极的前瞻,而只是分组,比如:

(^\+\d\d)([\d-]+)?

prefix 将在第 1 组中,其余数字在第 2 组中,因此要在这些部分之间添加一个空格,只需使用 group1 + space + group2 之类的东西。在您的示例中,它应该如下所示:

Pattern pattern = Pattern.compile("(^\\+\\d\\d)([\\d-]+)?");
if(pattern.matcher("+441234567890").matches()) {
num = pattern.matcher(title).replaceFirst("$1 $2");
}

但是这个正则表达式总是会捕获前缀中的两位数,如果你想匹配 +44 或 +4 你应该使用:

(^\+(44|4))([\d-]+)?

因此,如果您有更多可能的前缀,您还需要更改此正则表达式。

你的正则表达式没有像你预期的那样工作,因为 (?:([0-9]+))? 是一个非捕获组,所以正则表达式的这一部分匹配的 fragment 不是捕获,但它仍然与整个正则表达式匹配。所以 $0 返回了整个正则表达式,而 $1 不应返回任何内容。

关于java - 匹配正则表达式但只替换第一部分 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32171856/

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