我需要一个正则表达式来获得没有国家代码的电话号码,如果他们在那里。似乎四处看看应该可以解决这个问题,但我不能得到最终的解决方案。以下是主题:
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上查看。当您将鼠标悬停在匹配项上时,您可以看到唯一组的内容。