正则表达式跳过前缀(如果存在),例如电话号码的国家/地区代码



我需要一个正则表达式来获得没有国家代码的电话号码,如果他们在那里。似乎四处看看应该可以解决这个问题,但我不能得到最终的解决方案。以下是主题:

In-country: 0008003428573
Outside: +91 4058 825058
With dots: +91.88.4732.1354

期望的匹配是:

8003428573
4058 825058
88.4732.1354

我知道我可以使用(?!91)来避免匹配91,例如

(?!91)[1-9][-. 0-9]{8,11}[0-9](?![0-9])

…然后它像1 4058 825058一样匹配1

在Perl中测试时,我还发现了一个使用if-then条件的完整解决方案:

(?!91)(?(?=1)(?<!9)|)[1-9][-. 0-9]{8,11}[0-9](?![0-9])

但后来发现它在Objective c中的nsregulareexpression不起作用

解决方案不能使用组,因为我有多个由相同代码处理的不同情况的正则表达式。代码在某些情况下不能使用组1,在其他情况下不能使用组2…除非没有办法用正则表达式解决这个问题。' 91不能在整体匹配中。

是否有一种方法可以在Obj-C中使用正则表达式?

使用组的解决方案,请注意,具有结果的组总是在组1中,因为其他组是非捕获的!

?:开头的组为非捕获组。
(?:b0+|B+91[. ]?)([1-9]d+(?:[. ]d+)*)b

在Regexr上查看。当您将鼠标悬停在匹配项上时,您可以看到唯一组的内容。

最新更新