基本上,我正在寻找一个使用NSRegularExpression匹配HTML(以及换行符和空格)的好示例。
我有一段时间写的这个PHP代码:
preg_match_all("/<dt>(.+?)<\/dt>\W+<dd>(.+?)<\/dd>/si", $data, $m['deets']);
现在,我知道这在PHP中有效,但是对于我一生来说,我无法将其转换为Objective-C。这是我的尝试。
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<dt>(.+?)<\/dt>\W+<dd>(.+?)<\/dd>" options:(NSRegularExpressionCaseInsensitive) error:&error];
return [regex matchesInString:target options:NSCaseInsensitiveSearch range:NSMakeRange(0, [target length])];
在这种情况下,我的目标是一堆HTML。
最佳答案
我从未使用过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很酷,如果要获取目标字符串的匹配范围,请不要使用。
您的代码是正确的,但是问题来自regexp表达式,您必须转义\字符而不是转义/。
@"<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])];
关于iphone - 将HTML与NSRegularExpression匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9664699/