正则表达式跳过前缀,如果它在那里,如电话号码的国家代码

时间:2013-06-03 06:34:19

标签: objective-c regex nsregularexpression

我需要一个正则表达式来获取没有国家/地区代码的电话号码,如果它们在那里的话。似乎外观应该适用于此,但我无法完全达到最终解决方案。以下是主题:

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匹配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中的正则表达式做到这一点?

1 个答案:

答案 0 :(得分:0)

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

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

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