2014-02-24 154 views
0

为什么这个表达式与replaceMatchesInString仅返回“+”代替“+123”?正则表达式(replaceMatchesInString)不起作用

NString *phoneNumberCleaned = [NSString stringWithFormat:@"++00123"]; 

NSString *strRegExPhoneNumberPrefixWrong = @"^([+0]*)\\d*$"; 

NSRegularExpression *regEx = [NSRegularExpression regularExpressionWithPattern:strRegEx options:0 error:nil]; 

[regEx replaceMatchesInString:phoneNumberCleaned options:0 range:NSMakeRange(0, [phoneNumberCleaned length]) withTemplate:@"+"]; 

return phoneNumberCleaned; 

感谢

回答

0
NSString *string = @"++00123"; 
NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression 
    regularExpressionWithPattern:@"^[+0]+(?=\\d*)" 
         options:NSRegularExpressionCaseInsensitive 
          error:&error]; 

NSString *modifiedString = [regex 
      stringByReplacingMatchesInString:string 
            options:0 
             range:NSMakeRange(0, [string length]) 
           withTemplate:@"+"]; 
return modifiedString; 

与您正则表达式的问题是,^([+0]*)\\d*$也匹配\d*这意味着,它也被替换(你会认为,这将只替换您的捕获组,但显然情况并非如此)。所以你essentialy更换,上述模式(这是包括任何尾随的数字),而你的情况是整个数字匹配任何字符串。

我在答复中使用所谓的positive lookahead

^[+0]+(?=\\d*)$ 

先行基本上意味着你正在寻找零个或多个+0被后跟零个或多个数字不包括从比赛中位数。所以,你只能更换之后他们的零和长处,而不是数字。

+0

的工作,谢谢! – Manuel