我需要一个正则表达式来获取没有国家/地区代码的电话号码,如果它们在那里的话。似乎外观应该适用于此,但我无法完全达到最终解决方案。以下是主题:
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中的正则表达式做到这一点?
答案 0 :(得分:0)
使用群组的解决方案请注意,结果的群组总是在群组1 ,因为其他群组是非捕获的!以?:
开头的组是非捕获组。
(?:\b0+|\B\+91[. ]?)([1-9]\d+(?:[. ]\d+)*)\b
见here on Regexr。将鼠标悬停在匹配项上时,您可以看到唯一组的内容。