为什么带有replaceMatchesInString 的正则表达式仅返回“+”而不是“+123”?
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;
Thanks
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*
这意味着,它也会被替换(您可能认为它只会替换您的捕获组,但显然事实并非如此)。因此,您本质上是替换与上述模式匹配的任何字符串(包括任何尾随数字),在您的情况下是整个数字。
我在回答中使用的称为积极的前瞻 http://www.regular-expressions.info/lookaround.html.
^[+0]+(?=\\d*)$
前瞻基本上意味着您正在寻找零个或多个+
or 0
后跟零个或多个数字,排除匹配中的数字。因此,您只需替换零和加号,而不替换它们后面的数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)