2014-02-24 77 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