Objective-C NSRegularExpressions, finding first occurrence of numbers in a string
cocoa, ios, nsregularexpression, objective-c, regex
Solution
First the problems with the regex:
- You are using word boundaries (`\b`) which means you are only looking for a number that is by itself (e.g. 15 but not 150A).
- Your number range does not include `0` so it would not capture `150`. It needs to be `[0-9]+` and better yet use `\d+`.
So to fix this, if you want to capture any number all you need is `\d+`. If you want to capture anything that starts with a number then only put the word boundary at the beginning `\b\d+`.
Now to get the first occurrence you can use `-[regex rangeOfFirstMatchInString:options:range:]`
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\b\\d+" options:NSRegularExpressionCaseInsensitive error:®Error];
if (regError) {
NSLog(@"%@",regError.localizedDescription);
}
NSString *model = @"150A";
NSString *foundModel = nil;
NSRange range = [regex rangeOfFirstMatchInString:model options:kNilOptions range:NSMakeRange(0, [model length])];
if(range.location != NSNotFound)
{
foundModel = [model substringWithRange:range];
}
NSLog(@"Model: %@", foundModel);
Problem
I'm pretty green at regex with Objective-C. I'm having some difficulty with it. ``` NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\b([1-9]+)\\b" options:NSRegularExpressionCaseInsensitive error:®Error]; if (regError) { NSLog(@"%@",regError.localizedDescription); } __block NSString *foundModel = nil; [regex enumerateMatchesInString:self.model options:kNilOptions range:NSMakeRange(0, [self.model length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) { foundModel = [self.model substringWithRange:[match rangeAtIndex:0]]; *stop = YES; }]; ``` All I'm looking to do is take a string like ``` 150A ``` And get ``` 150 ```