我有一个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上找到的所有答案要么知道要搜索的子字符串,要么知道子字符串的位置。有什么帮助吗?
答案 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);
}
}];