【问题标题】:regex skip prefix if it's there, like country code of phone number正则表达式跳过前缀(如果存在),例如电话号码的国家/地区代码
【发布时间】:2013-06-30 02:41:04
【问题描述】:

我需要一个正则表达式来获取没有国家代码的电话号码(如果有的话)。看起来环视应该可以解决这个问题,但我无法找到最终的解决方案。以下是主题:

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 中使用正则表达式来做到这一点?

【问题讨论】:

    标签: objective-c regex nsregularexpression


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 2023-04-10
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多