使用正则式匹配NSRegularExpression
- (void)regularMethod{
NSString *string = @"hsrjtosmtdetail:id=112110&goodsid=123456789&sourcetype=1"; //格式
NSString *regxStr = @":id=(\\d)+|type=(\\d)|goodsid=(\\d)+"; //正则式
NSError *error;
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:regxStr options:NSRegularExpressionCaseInsensitive error:&error];
if (error) {
NSLog(@"error=%@",error);
return;
}
__block NSString *ID;
__block NSString *goodsID;
[regular enumerateMatchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, string.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
NSRange matchRange = result.range;
if (matchRange.length && matchRange.location) {
NSString *str = [string substringWithRange:matchRange];
if ([str containsString:@":id"]) {
ID = [str substringFromIndex:4];
}else if ([str containsString:@"goodsid="]){
goodsID = [str substringFromIndex:8];
}
}
}];
NSLog(@"id=%@ %@",ID,goodsID); //输出id=112110 123456789
}
其他
- (BOOL)validateString:(NSString *)string withPattern:(NSString *)pattern{
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSRange textRange = NSMakeRange(0, string.length);
//1.返回第一个正确匹配结果字符串的NSRange
NSRange matchRange = [regex rangeOfFirstMatchInString:string options:NSMatchingReportProgress range:textRange];
NSLog(@"%@",NSStringFromRange(matchRange));//{3, 2}
//2.返回第一个匹配的结果,结果保存在 NSTextCheckingResult
NSTextCheckingResult *textCheck = [regex firstMatchInString:string options:NSMatchingReportProgress range:textRange];
NSLog(@"%@",NSStringFromRange(textCheck.range));//{3, 2}
//3.返回匹配个数
NSUInteger number = [regex numberOfMatchesInString:string options:NSMatchingReportProgress range:textRange];
NSLog(@"%lu",(unsigned long)number);//2
//4.返回所有匹配的结果
NSArray<NSTextCheckingResult *> *results = [regex matchesInString:string options:NSMatchingReportProgress range:textRange];
NSLog(@"%@",results);
//"<NSSimpleRegularExpressionCheckingResult: 0x60800007c580>{3, 2}{<NSRegularExpression: 0x60000004e6a0> L[A-C] 0x1}",
//"<NSSimpleRegularExpressionCheckingResult: 0x60800007c040>{8, 2}{<NSRegularExpression: 0x60000004e6a0> L[A-C] 0x1}"
//5.
[regex enumerateMatchesInString:string options:0 range:textRange usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
NSLog(@"%@",result);
}];
//"<NSSimpleRegularExpressionCheckingResult: 0x60800007c580>{3, 2}{<NSRegularExpression: 0x60000004e6a0> L[A-C] 0x1}",
//"<NSSimpleRegularExpressionCheckingResult: 0x60800007c040>{8, 2}{<NSRegularExpression: 0x60000004e6a0> L[A-C] 0x1}"
//6.替换匹配的值
NSString *newString = [regex stringByReplacingMatchesInString:string options:0 range:textRange withTemplate:@"Replace-100"];
NSLog(@"new str:%@",newString);//new str:w29Replace-100jswReplace-100nkow
BOOL didValidate = NO;
if (matchRange.location != NSNotFound)
didValidate = YES;
return didValidate;
}