/ / Coincidencia de HTML con NSRegularExpression - iphone, object-c, ios, regex, nsregularexpression

Coincidencia de HTML con NSRegularExpression - iphone, object-c, ios, regex, nsregularexpression

Básicamente, estoy buscando un buen ejemplo de HTML coincidente (también líneas nuevas y espacios en blanco) usando NSRegularExpression.

Tengo este código PHP que escribí hace un tiempo:

preg_match_all("/<dt>(.+?)</dt>W+<dd>(.+?)</dd>/si",       $data, $m["deets"]);

Ahora sé que esto funciona en PHP pero para mi vida no puedo traducirlo a Objective-C. Aquí estaba mi intento.

NSRegularExpression *regex  = [NSRegularExpression regularExpressionWithPattern:@"<dt>(.+?)</dt>W+<dd>(.+?)</dd>" options:(NSRegularExpressionCaseInsensitive) error:&error];
return [regex matchesInString:target options:NSCaseInsensitiveSearch range:NSMakeRange(0, [target length])];

Mi objetivo en este caso es un montón de HTML.

Respuestas

1 para la respuesta № 1

Nunca utilicé NSRegularExpression, sino NSPredicate en su lugar:

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
}

Espero que esto ayude.

EDITAR:

NSPredicate es genial, no trabaje si desea obtener el rango coincidente de su cadena de destino.

Su código es correcto, pero el problema proviene de la expresión de expresión regular, debe escapar de sus personajes y no escapar / unos.

@"<dt>(.+?)</dt>\W+<dd>(.+?)</dd>"

Asi que :

NSRegularExpression *regex  = [NSRegularExpression regularExpressionWithPattern:@"<dt>(.+?)</dt>\W+<dd>(.+?)</dd>" options:(NSRegularExpressionCaseInsensitive) error:&error];
return [regex matchesInString:target options:NSCaseInsensitiveSearch range:NSMakeRange(0, [target length])];