rny*_*rom 5 regex cocoa objective-c ios nsregularexpression
使用Objective-C,我对正则表达式非常环保.我遇到了一些困难.
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;
}];
Run Code Online (Sandbox Code Playgroud)
我要做的就是拿一个字符串
150A
Run Code Online (Sandbox Code Playgroud)
得到
150
Run Code Online (Sandbox Code Playgroud)
首先是正则表达式的问题:
\b),这意味着您只需要查找单独的数字(例如15而不是150A).0因此无法捕获150.它需要[0-9]+并且更好地使用\d+.所以要解决这个问题,如果你想捕获任何数字,你需要的就是\d+.如果要捕获以数字开头的任何内容,则只将单词边界放在开头\b\d+.
现在,您可以使用第一次出现 -[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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3694 次 |
| 最近记录: |