/ / Matching HTML com NSRegularExpression - iphone, object-c, ios, regex, expressão regular

Correspondência de HTML com NSRegularExpression - iphone, object-c, ios, regex, expressão regular

Basicamente eu estou procurando um bom exemplo de correspondência HTML (também novas linhas e espaços em branco) usando NSRegularExpression.

Eu tenho este código PHP que escrevi um tempo atrás:

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

Agora eu sei que isso funciona em PHP, mas para a vida de mim eu não posso traduzi-lo para Objective-C. Aqui foi a minha tentativa.

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

Meu alvo nesse caso é um monte de HTML.

Respostas:

1 para resposta № 1

Eu nunca usei NSRegularExpression, mas NSPredicate em vez disso:

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 isto ajude.

EDITAR:

NSPredicate é legal, não trabalhe se você quiser obter o intervalo correspondente de sua string de destino.

Seu código está certo, mas o problema vem da expressão regexp, você deve escapar de seus personagens e não escapar / ones.

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

Assim :

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