iOS:在目标C中提取NSString的子串

时间:2014-06-13 14:25:27

标签: ios objective-c nsstring

我有一个NSString

"<a href='javascript:void(null)' onclick='handleCommandForAnchor(this, 10);return false;'>12321<\/a>"

我需要从NSString的末尾提取12321并存储。 首先我试过

        NSString *shipNumHtml=[mValues objectAtIndex:1];
        NSInteger htmlLen=[shipNumHtml length];

        NSString *shipNum=[[shipNumHtml substringFromIndex:htmlLen-12]substringToIndex:8];

但后来我发现数字12321的长度可变。

我找不到类似java indexOf()的方法来查找'>''<',然后找到带有这些索引的子字符串。我在SO上找到的所有答案要么知道要搜索的子字符串,要么知道子字符串的位置。有什么帮助吗?

3 个答案:

答案 0 :(得分:3)

我通常不主张使用正则表达式来解析HTML内容,但似乎匹配>(\d+)<的正则表达式将用于此简单字符串中的作业。

这是一个简单的例子:

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@">(\\d+)<"
                                                                       options:0
                                                                         error:&error];
// Handle error != nil

NSTextCheckingResult *match = [regex firstMatchInString:string
                                                options:0
                                                  range:NSMakeRange(0, [string length])];
if (match) {
    NSRange matchRange = [match rangeAtIndex:1];
    NSString *number = [string substringWithRange:matchRange]
    NSLog(@"Number: %@", number);
}

答案 1 :(得分:1)

正如@HaneTV所说,您可以使用NSString方法rangeOfString来搜索子字符串。鉴于角色&#34;&gt;&#34;和&#34;&lt;&#34;出现在字符串的多个位置,因此您可能需要查看NSRegularExpression和/或NSScanner。

答案 2 :(得分:0)

这可能对你有所帮助,我刚刚测试过:

NSString *_string = @"<a href='javascript:void(null)' onclick='handleCommandForAnchor(this, 10);return false;'>12321</a>";
NSError *_error;
NSRegularExpression *_regExp = [NSRegularExpression regularExpressionWithPattern:@">(.*)<" options:NSRegularExpressionCaseInsensitive error:&_error];
NSArray *_matchesInString = [_regExp matchesInString:_string options:NSMatchingReportCompletion range:NSMakeRange(0, _string.length)];
[_matchesInString enumerateObjectsUsingBlock:^(NSTextCheckingResult * result, NSUInteger idx, BOOL *stop) {
    for (int i = 0; i < result.numberOfRanges; i++) {
        NSString *_match = [_string substringWithRange:[result rangeAtIndex:i]];
        NSLog(@"%@", _match);
    }
}];