0

我有从 url 获取标题的方法。

它有效,但在一个网站上我没有匹配结果。

你知道问题出在哪里吗?

网页上的标题是测试 - sds

NSURL *url_s = [NSURL URLWithString:url];
            NSData* data = [NSData dataWithContentsOfURL:url_s];

            if(data!=nil){
                NSString* newStr = [NSString stringWithUTF8String:[data bytes]];
                NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<title>(.*)</title>" options:0 error:NULL];

                NSTextCheckingResult *match = [regex firstMatchInString:newStr options:0 range:NSMakeRange(0, [newStr length])];

                NSString *title = [newStr substringWithRange:[match rangeAtIndex:1]];
}
4

2 回答 2

2

在将 HTML 与模式匹配时,您应该使用NSRegularExpressionCaseInsensitiveand选项。NSRegularExpressionDotMatchesLineSeparators

NSRegularExpressionOptions opts = NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<title>(.*)</title>"
                                                                       options:opts
                                                                         error:NULL];
于 2013-10-18T13:32:43.180 回答
1

您不能使用正则表达式安全地从 HTML 或 XML 派生内容。XML 和 HTML 是有状态的,因此它们实际上必须这样解析。例如,使用正则表达式会返回错误的结果:

<html>
<head>
    <!--<title>Old Title</title>-->
    <title>New Title</title>
</head>
</html>

您应该选择 HTML 解析器并使用它。我之前在应用程序中成功使用过Hpple

于 2013-10-18T14:37:16.517 回答