Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的Objective-C程序使用正则表达式获取整个HTML,但有时会出现异常_Objective C_Regex_Facebook_Html Parsing - Fatal编程技术网

我的Objective-C程序使用正则表达式获取整个HTML,但有时会出现异常

我的Objective-C程序使用正则表达式获取整个HTML,但有时会出现异常,objective-c,regex,facebook,html-parsing,Objective C,Regex,Facebook,Html Parsing,这是关于Objective-C的问题。我编写了一个程序,它使用正则表达式获取整个HTML。我已经将程序上传到GitHub。但是,出现异常 本程序的目的是通过正则表达式匹配得到“og:image”。这是通过在Facebook中写入URL显示的图像。要设置此图像,请使用HTML编写,如下所示: <meta property="og:image" content="http://business.nikkeibp.co.jp/article/NBD/20120727/235043/zu1.jpg

这是关于Objective-C的问题。我编写了一个程序,它使用正则表达式获取整个HTML。我已经将程序上传到GitHub。但是,出现异常

本程序的目的是通过正则表达式匹配得到“og:image”。这是通过在Facebook中写入URL显示的图像。要设置此图像,请使用HTML编写,如下所示:

<meta property="og:image"
content="http://business.nikkeibp.co.jp/article/NBD/20120727/235043/zu1.jpg">

所以我写了一个程序,可以得到整个HTML并找到og:image部分。代码如下:

// Web page address
NSURL *url = [NSURL URLWithString:textField.text];

// Get the web page HTML
NSString *string = 
[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

// prepare regular expression to find text
NSError *error   = nil;
NSRegularExpression *regexp =
[NSRegularExpression regularExpressionWithPattern:
 @"<meta property=\"og:image\" content=\".+\""
                                          options:0
                                            error:&error];

@try {
    // find by regular expression
    NSTextCheckingResult *match =
    [regexp firstMatchInString:string options:0 range:NSMakeRange(0, string.length)];

    // get the first result
    NSRange resultRange = [match rangeAtIndex:0];
    NSLog(@"match=%@", [string substringWithRange:resultRange]); 

    if (match) {

        // get the og:image URL from the find result
        NSRange urlRange = NSMakeRange(resultRange.location + 35, resultRange.length - 35 - 1);
        NSURL *urlOgImage = [NSURL URLWithString:[string substringWithRange:urlRange]];
        imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:urlOgImage]];
    }
}
//网页地址
NSURL*url=[NSURL URLWithString:textField.text];
//获取网页HTML
NSString*字符串=
[NSString stringWithContentsOfURL:url编码:NSUTF8StringEncoding错误:无];
//准备正则表达式以查找文本
n错误*错误=nil;
NSRegularExpression*regexp=
[NSRegularExpression regular expression with pattern:

@“看起来您的正则表达式与第二个页面的结果不匹配,您是否在正则表达式测试仪中使用正则表达式测试了该页面的html源代码


类似这样的操作应该可以解决问题:

看起来正则表达式与第二个页面的结果不匹配,您是否在正则表达式测试仪中使用正则表达式测试了该页面的html源代码


类似这样的东西应该可以做到这一点:

我的朋友善意地指出要考虑字符编码。第一个URL页面的字符编码是UTF-8,第二个是EUC-JP

使用下面的代码,我可以得到上面显示的第二个URL的og:image

- (NSString *)encodedStringWithContentsOfURL:(NSURL *)url
{
    // Get the web page HTML
    NSData *data = [NSData dataWithContentsOfURL:url];

    // response
    int enc_arr[] = {
        NSUTF8StringEncoding,           // UTF-8
        NSShiftJISStringEncoding,       // Shift_JIS
        NSJapaneseEUCStringEncoding,    // EUC-JP
        NSISO2022JPStringEncoding,      // JIS
        NSUnicodeStringEncoding,        // Unicode
        NSASCIIStringEncoding           // ASCII
    };
    NSString *data_str = nil;
    int max = sizeof(enc_arr) / sizeof(enc_arr[0]);
    for (int i=0; i<max; i++) {
        data_str = [
               [NSString alloc]
               initWithData : data
               encoding : enc_arr[i]
               ];
        if (data_str!=nil) {
               break;
        }
    }
    return data_str;    
}
-(NSString*)encodedStringWithContentsOfURL:(NSURL*)url
{
//获取网页HTML
NSData*data=[NSData dataWithContentsOfURL:url];
//回应
int enc_arr[]={
NSUTF8StringEncoding,//UTF-8
NSShiftJISStringEncoding,//Shift\u JIS
NSJapaneseEUCStringEncoding,//EUC-JP
NSISO2022JPStringEncoding,//JIS
NSU编码,//Unicode
NSASCIIStringEncoding//ASCII
};
NSString*data_str=nil;
int max=sizeof(enc_arr)/sizeof(enc_arr[0]);

对于(inti=0;i我的朋友善意地指出了考虑字符编码的问题。第一个URL页面的字符编码是UTF-8,第二个是EUC-JP

使用下面的代码,我可以得到上面显示的第二个URL的og:image

- (NSString *)encodedStringWithContentsOfURL:(NSURL *)url
{
    // Get the web page HTML
    NSData *data = [NSData dataWithContentsOfURL:url];

    // response
    int enc_arr[] = {
        NSUTF8StringEncoding,           // UTF-8
        NSShiftJISStringEncoding,       // Shift_JIS
        NSJapaneseEUCStringEncoding,    // EUC-JP
        NSISO2022JPStringEncoding,      // JIS
        NSUnicodeStringEncoding,        // Unicode
        NSASCIIStringEncoding           // ASCII
    };
    NSString *data_str = nil;
    int max = sizeof(enc_arr) / sizeof(enc_arr[0]);
    for (int i=0; i<max; i++) {
        data_str = [
               [NSString alloc]
               initWithData : data
               encoding : enc_arr[i]
               ];
        if (data_str!=nil) {
               break;
        }
    }
    return data_str;    
}
-(NSString*)encodedStringWithContentsOfURL:(NSURL*)url
{
//获取网页HTML
NSData*data=[NSData dataWithContentsOfURL:url];
//回应
int enc_arr[]={
NSUTF8StringEncoding,//UTF-8
NSShiftJISStringEncoding,//Shift\u JIS
NSJapaneseEUCStringEncoding,//EUC-JP
NSISO2022JPStringEncoding,//JIS
NSU编码,//Unicode
NSASCIIStringEncoding//ASCII
};
NSString*data_str=nil;
int max=sizeof(enc_arr)/sizeof(enc_arr[0]);

对于(int i=0;我感谢您的建议。很抱歉,我在测试工具之前解决了我的问题,但我认为这是一个有用的工具。感谢您的建议。很抱歉,我在测试工具之前解决了我的问题,但我认为这是一个有用的工具。