0

我需要一个正则表达式来获取没有国家代码的电话号码,如果他们在那里的话。看起来环顾四周应该适用于此,但我不能完全得到最终的解决方案。以下是主题:

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])

...但随后它与1like匹配1 4058 825058

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

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

但后来发现它不适用于Objective C中的NSRegularExpression。

该解决方案不能使用组,因为对于由相同代码处理的不同情况,我有多个正则表达式。代码在某些情况下不能使用第 1 组,在其他情况下不能使用第 2 组。除非没有办法用正则表达式解决这个问题。`91 不得出现在整体比赛中。

有没有办法用 Obj-C 中的正则表达式来做到这一点?

4

1 回答 1

0

请注意,使用组的解决方案具有结果的组始终在组 1中,因为其他组是非捕获的!以 开头的组?:是非捕获组。

(?:\b0+|\B\+91[. ]?)([1-9]\d+(?:[. ]\d+)*)\b

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

于 2013-06-03T06:49:46.787 回答