Java 正则表达式替换问题理解

Java 正则表达式替换问题理解,java,regex,matcher,Java,Regex,Matcher,我试图为无效的电话号码编写一个替换逻辑,我提供了一个映射 我通读了一些正则表达式线程,但我不知道这是否真的可行 例如: 输入电话号码:+410712345678 我正在尝试使用的正则表达式: "^\\+(?:[0-9] ?){6,14}[0-9]$" 正则表达式和筛选后的数字应为:+41712345678。因此,实际上正在删除0的第一个实例 第二个例子: 输入电话号码:+41(071)2345678 我正在尝试使用的正则表达式: "^\\+(?:[0-9] ?)\\({0,3}\\){3,

我试图为无效的电话号码编写一个替换逻辑,我提供了一个映射 我通读了一些正则表达式线程,但我不知道这是否真的可行

例如:

输入电话号码:+410712345678

我正在尝试使用的正则表达式:

 "^\\+(?:[0-9] ?){6,14}[0-9]$" 
正则表达式和筛选后的数字应为:+41712345678。因此,实际上正在删除0的第一个实例

第二个例子:

输入电话号码:+41(071)2345678

我正在尝试使用的正则表达式:

"^\\+(?:[0-9] ?)\\({0,3}\\){3,11}[0-9]$"
正则表达式和筛选后的数字应为:+41712345678。所以实际上删除了0的第一个实例和大括号

我正在尝试使用某种模式来自动删除那些电话号码中的无效部分。这些数字需要以这种方式格式化才能与我的VOIP应用程序一起使用


有没有办法用regex创建这样的过滤模式?

似乎您应该只将该规则应用于瑞士电话号码,即
+41
号码,因为简单地从任何国际号码中删除第一个
0
是错误的

所以,
ph=ph.replaceFirst(“^(\\+41)\\(?0?([0-9]{2})\\)?”,“$1$2”)


查看它的工作原理。

似乎您应该只对瑞士电话号码,即
+41
号码应用该规则,因为简单地从任何国际号码中删除第一个
0
是错误的

所以,
ph=ph.replaceFirst(“^(\\+41)\\(?0?([0-9]{2})\\)?”,“$1$2”)


查看它的工作原理。

谢谢您的回答

我使用以下代码将正则表达式应用于我的TestImport:

 //...

log.debug("Applying Regex :" + SearchString + " with Replace: " + ReplaceString);   

log.debug("Applying Regex for Number:" + Person.get(EPerson.Rufnummer));
Person.put(EPerson.Rufnummer, Person.get(EPerson.Rufnummer).replaceFirst(SearchString, ReplaceString));
log.debug("New Number is:" +Person.get(EPerson.Rufnummer));

log.debug("Applying Regex for Number:" + Person.get(EPerson.RufnummerMobil));
Person.put(EPerson.RufnummerMobil, Person.get(EPerson.RufnummerMobil).replaceFirst(SearchString, ReplaceString));
log.debug("New Number is:" +Person.get(EPerson.RufnummerMobil));
    //...
调试[AddressbookFactory]将Numberfilter应用于:{Vorname=Testinator,Nachname=Test,Rufnummer=+410717271818,RufnummerMobil=,RufnummerPrivat=+41(071)7271818,Fax=,Strasse=,PLZ=,statt=,Bundesland=,Email=,Firma=,URL=}

检测到调试[AddressbookFactory]正则表达式

调试[AddressbookFactory]应用正则表达式:^(+41)(?0?([0-9]{2}))?替换:1美元2美元

调试[AddressbookFactory]应用编号:+410717271818的正则表达式

调试[AddressbookFactory]新编号为:+41717271818

调试[AddressbookFactory]应用编号:+41(071)7271818的正则表达式

调试[AddressbookFactory]新编号为:+41717271818

成功了

非常感谢您的快速回复

我把你的答案标记为有用,但通过我的“新手”名声,它并没有表明这一点

这个问题解决了


衷心感谢您的回答

我使用以下代码将正则表达式应用于我的TestImport:

 //...

log.debug("Applying Regex :" + SearchString + " with Replace: " + ReplaceString);   

log.debug("Applying Regex for Number:" + Person.get(EPerson.Rufnummer));
Person.put(EPerson.Rufnummer, Person.get(EPerson.Rufnummer).replaceFirst(SearchString, ReplaceString));
log.debug("New Number is:" +Person.get(EPerson.Rufnummer));

log.debug("Applying Regex for Number:" + Person.get(EPerson.RufnummerMobil));
Person.put(EPerson.RufnummerMobil, Person.get(EPerson.RufnummerMobil).replaceFirst(SearchString, ReplaceString));
log.debug("New Number is:" +Person.get(EPerson.RufnummerMobil));
    //...
调试[AddressbookFactory]将Numberfilter应用于:{Vorname=Testinator,Nachname=Test,Rufnummer=+410717271818,RufnummerMobil=,RufnummerPrivat=+41(071)7271818,Fax=,Strasse=,PLZ=,statt=,Bundesland=,Email=,Firma=,URL=}

检测到调试[AddressbookFactory]正则表达式

调试[AddressbookFactory]应用正则表达式:^(+41)(?0?([0-9]{2}))?替换:1美元2美元

调试[AddressbookFactory]应用编号:+410717271818的正则表达式

调试[AddressbookFactory]新编号为:+41717271818

调试[AddressbookFactory]应用编号:+41(071)7271818的正则表达式

调试[AddressbookFactory]新编号为:+41717271818

成功了

非常感谢您的快速回复

我把你的答案标记为有用,但通过我的“新手”名声,它并没有表明这一点

这个问题解决了

真诚的法比安95QW