Я никогда не использовал NSRegularExpression, но вместо этого NSPredicate:
NSError *error = NULL;
NSString* pattern = @"/<dt>(.+?)<\/dt>\W+<dd>(.+?)<\/dd>/si";
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
if ([predicate evaluateWithObject:myTargetString] == YES) {
// Okay
} else {
// Not found
}
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ:
NSPredicate это круто, бытьне работает, если вы хотите получить соответствующий диапазон вашей целевой строки.
Ваш код верен, но проблема заключается в выражении регулярного выражения, вы должны экранировать свои символы \, а не экранировать / единицы.
@"<dt>(.+?)</dt>\\W+<dd>(.+?)</dd>"
Итак:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<dt>(.+?)</dt>\\W+<dd>(.+?)</dd>" options:(NSRegularExpressionCaseInsensitive) error:&error];
return [regex matchesInString:target options:NSCaseInsensitiveSearch range:NSMakeRange(0, [target length])];