Ios NSRegularExpression崩溃

Ios NSRegularExpression崩溃,ios,objective-c,regex,crash,Ios,Objective C,Regex,Crash,我正在使用NSRegularExpression从HTML中选择图像URL。然而,当我尝试实际使用它时,我得到以下错误: *由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'*-[NSRegularExpression枚举匹配安装:选项:范围:usingBlock::nil参数' 我看过其他类似的Stackoverflow答案,但该问题使用了NSMatchingOption,而我没有,答案没有给出我的情况有什么问题的信息 下面是正在崩溃的代码: NS

我正在使用NSRegularExpression从HTML中选择图像URL。然而,当我尝试实际使用它时,我得到以下错误:

*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'*-[NSRegularExpression枚举匹配安装:选项:范围:usingBlock::nil参数'

我看过其他类似的Stackoverflow答案,但该问题使用了NSMatchingOption,而我没有,答案没有给出我的情况有什么问题的信息

下面是正在崩溃的代码:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"](.*?)['\"][\\s\\S]*?>)+?" options:NSRegularExpressionCaseInsensitive error:nil];
NSString *source = [NSString stringWithContentsOfURL:[NSURL URLWithString:object[@"link"]] encoding:NSUTF8StringEncoding error:nil];

NSArray *imageResults = [regex matchesInString:source options:0 range:NSMakeRange(0, source.length)];
NSURL *link = [imageResults.firstObject URL];
UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:link]];
if (img)
{
    [self.images setObject:img forKey:object[@"link"]];
    dispatch_async(dispatch_get_main_queue(), ^{
        cell.imageView.image = img;
        [cell layoutSubviews];
    });
}
NSRegularExpression*regex=[NSRegularExpression regular expression with pattern:@“()+?”选项:NSRegularExpression不区分大小写错误:nil];
NSString*source=[NSString stringWithContentsOfURL:[NSURL URLWithString:object[@“link”]]编码:NSUTF8STRING编码错误:nil];
NSArray*imageResults=[regex-matchesisnstring:source-options:0-range:NSMakeRange(0,source.length)];
NSURL*link=[imageResults.firstObject URL];
UIImage*img=[UIImage-imageWithData:[NSData-dataWithContentsOfURL:link]];
如果(img)
{
[self.images setObject:img forKey:object[@“link”];
dispatch\u async(dispatch\u get\u main\u queue()^{
cell.imageView.image=img;
[单元布局子视图];
});
}
崩溃本身发生在实例化了
imageResults
的行上


有人知道这段代码有什么问题吗?

有一个问题:
匹配安装:source
返回一个
NSTextCheckingResults
数组

例如,必须添加错误检查:

NSString *regExp = @"<img\\s+src=[\"']([^\"']+)";
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regExp options:NSRegularExpressionCaseInsensitive error:&error];

NSString *source = @"leading<img src=\"news.google.com/news/…\" alt=\"Smiley face\">more";

NSArray *matchResults = [regex matchesInString:source options:0 range:NSMakeRange(0, source.length)];
NSTextCheckingResult *result0 = matchResults[0];
NSRange imgRange = [result0 rangeAtIndex:1];
NSLog(@"imgRange: %@, '%@'", NSStringFromRange(imgRange), [source substringWithRange:imgRange]);
NSString*regExp=@“更多”;
NSArray*matchResults=[regex-matchesInString:source-options:0-range:NSMakeRange(0,source.length)];
NSTextCheckingResult*result0=匹配结果[0];
NSRange imgRange=[result0 rangeAtIndex:1];
NSLog(@“imgRange:%@,%@',NSStringFromRange(imgRange),[source substringWithRange:imgRange]);
输出:

imgRange: {18793, 68}, 'http://a.espncdn.com/espncitysites/newyork/prod/assets/sub_ny_r3.png' imgRange: {18793, 68}, 'http://a.espncdn.com/espncitysites/newyork/prod/assets/sub_ny_r3.png' imgRange: {19784, 172}, 'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nba;pgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=150x45,1x1;' imgRange: {22162, 182}, 'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nba;pgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=1280x946,200x800,1x1;' imgRange: {23470, 186}, 'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nba;pgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=728x90,970x66,924x50,1x1;' imgRange: {29706, 36}, 'http://a.espncdn.com/icons/in_15.png' imgRange: {30352, 103}, 'http://a.espncdn.com/media/motion/2014/1003/dm_141003_nba_schwartz_bron/dm_141003_nba_schwartz_bron.jpg' imgRange: {31339, 37}, 'http://a.espncdn.com/icons/video2.png' imgRange: {34098, 65}, 'http://a.espncdn.com/photo/2014/1001/nba_a_lebron01jr_300x300.jpg' imgRange: {35987, 55}, 'http://a.espncdn.com/i/columnists/windhorst_brian_m.jpg' imgRange: {38249, 79}, 'http://a.espncdn.com/combiner/i?img=/photo/2014/0926/nba_a_james_mb_203x114.jpg' imgRange: {41787, 36}, 'http://a.espncdn.com/icons/in_15.png' imgRange: {42698, 87}, 'http://a.espncdn.com/combiner/i?img=%2fi%2fcolumnists%2fmcmenamin_dave_35.jpg&w=35&h=48' imgRange: {48148, 68}, 'http://a.espncdn.com/photo/2014/1002/nba_garnett_wiggins_203x114.jpg' imgRange: {48834, 33}, 'http://a.espncdn.com/icons/in.gif' imgRange: {50157, 181}, 'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nba;pgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=300x600,300x250,1x1;' imgRange: {51105, 45}, '/photo/2014/1003/mlb_g_martinez_b1_110x62.jpg' imgRange: {51801, 41}, '/photo/2014/1003/ny_u_geno2_js_110x62.jpg' imgRange: {52491, 43}, '/photo/2014/1002/nhl_g_fleury_b3_110x62.jpg' imgRange: {53201, 44}, '/photo/2014/1002/ny_g_betances_js_110x62.jpg' imgRange: {53902, 42}, '/photo/2014/1003/ny_g_murphy_js_110x62.jpg' imgRange: {54986, 66}, 'http://a.espncdn.com/i/Integrators/shop.lebron.welcome.300x100.jpg' imgRange:{17,22},'news.google.com/news/…'


请参阅:ICU用户指南

此答案针对上一个答案的评论中提供的问题和URL。它假设有多个图像URL,并且所有URL都是需要的。
注1:html编码为
nsisolatin1stringecoding

注2:RegExp用于处理“src=”的排序

NSString*urString=@”http://news.google.com/news/url?sa=t&fd=R&ct2=us&usg=AFQjCNHVXXEN0DG2pblU2_FBFfeS3klRVw&clid=c3a7d30bb8a4878e06b80cf16b898331&cid=52778623354837&ei=ugAvVMDVIsLGwAHPtYG4CA&url=http://espn.go.com/new-约克/nba/story/uid/11634537/克利夫兰骑士公开赛勒布朗·詹姆斯赛季常规休息”;
NSURL*url=[NSURL URLWithString:urString];
n错误*错误;
NSString*source=[NSString stringWithContentsOfURL:url编码:NSISOLATIN1STRINGGENCODING错误:&error];
if(source.length){
NSString*regExp=@”
输出:

imgRange: {18793, 68}, 'http://a.espncdn.com/espncitysites/newyork/prod/assets/sub_ny_r3.png' imgRange: {18793, 68}, 'http://a.espncdn.com/espncitysites/newyork/prod/assets/sub_ny_r3.png' imgRange: {19784, 172}, 'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nba;pgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=150x45,1x1;' imgRange: {22162, 182}, 'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nba;pgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=1280x946,200x800,1x1;' imgRange: {23470, 186}, 'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nba;pgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=728x90,970x66,924x50,1x1;' imgRange: {29706, 36}, 'http://a.espncdn.com/icons/in_15.png' imgRange: {30352, 103}, 'http://a.espncdn.com/media/motion/2014/1003/dm_141003_nba_schwartz_bron/dm_141003_nba_schwartz_bron.jpg' imgRange: {31339, 37}, 'http://a.espncdn.com/icons/video2.png' imgRange: {34098, 65}, 'http://a.espncdn.com/photo/2014/1001/nba_a_lebron01jr_300x300.jpg' imgRange: {35987, 55}, 'http://a.espncdn.com/i/columnists/windhorst_brian_m.jpg' imgRange: {38249, 79}, 'http://a.espncdn.com/combiner/i?img=/photo/2014/0926/nba_a_james_mb_203x114.jpg' imgRange: {41787, 36}, 'http://a.espncdn.com/icons/in_15.png' imgRange: {42698, 87}, 'http://a.espncdn.com/combiner/i?img=%2fi%2fcolumnists%2fmcmenamin_dave_35.jpg&w=35&h=48' imgRange: {48148, 68}, 'http://a.espncdn.com/photo/2014/1002/nba_garnett_wiggins_203x114.jpg' imgRange: {48834, 33}, 'http://a.espncdn.com/icons/in.gif' imgRange: {50157, 181}, 'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nba;pgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=300x600,300x250,1x1;' imgRange: {51105, 45}, '/photo/2014/1003/mlb_g_martinez_b1_110x62.jpg' imgRange: {51801, 41}, '/photo/2014/1003/ny_u_geno2_js_110x62.jpg' imgRange: {52491, 43}, '/photo/2014/1002/nhl_g_fleury_b3_110x62.jpg' imgRange: {53201, 44}, '/photo/2014/1002/ny_g_betances_js_110x62.jpg' imgRange: {53902, 42}, '/photo/2014/1003/ny_g_murphy_js_110x62.jpg' imgRange: {54986, 66}, 'http://a.espncdn.com/i/Integrators/shop.lebron.welcome.300x100.jpg' 伊姆格兰奇:{18793,68},'http://a.espncdn.com/espncitysites/newyork/prod/assets/sub_ny_r3.png' 伊姆格兰奇:{18793,68},'http://a.espncdn.com/espncitysites/newyork/prod/assets/sub_ny_r3.png' 伊姆格兰奇:{19784172},'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nbapgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=150x45,1x1;' 伊姆格兰奇:{22162182},'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nbapgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=1280x946200x800,1x1;' 伊姆格兰奇:{23470186},'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nbapgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=728x90970x66924x50,1x1;' 伊姆格兰奇:{29706,36},'http://a.espncdn.com/icons/in_15.png' imgRange:{30352103},'http://a.espncdn.com/media/motion/2014/1003/dm_141003_nba_schwartz_bron/dm_141003_nba_schwartz_bron.jpg' 伊姆格兰奇:{31339,37},'http://a.espncdn.com/icons/video2.png' 伊姆格兰奇:{3409865},'http://a.espncdn.com/photo/2014/1001/nba_a_lebron01jr_300x300.jpg' 伊姆格兰奇:{35987,55},'http://a.espncdn.com/i/columnists/windhorst_brian_m.jpg' 伊姆格兰奇:{38249,79},'http://a.espncdn.com/combiner/i?img=/photo/2014/0926/nba_a_james_mb_203x114.jpg' 伊姆格兰奇:{41787,36},'http://a.espncdn.com/icons/in_15.png' 伊姆格兰奇:{42698,87},'http://a.espncdn.com/combiner/i?img=%2fi%2fcolumnists%2fmcmenamin_dave_35.jpg&w=35&h=48' 伊姆格兰奇:{48148,68},'http://a.espncdn.com/photo/2014/1002/nba_garnett_wiggins_203x114.jpg' 伊姆格兰奇:{48834,33},'http://a.espncdn.com/icons/in.gif' 伊姆格兰奇:{50157181},'http://ad.Doubleclick.net/ad/espn.local.newyork.com/nbapgtyp=story;sp=nba;tm=cle;pl=1015;pl=1966;pl=2028618;pl=215;pl=2419;objid=11634537;col=mcmenamin_dave;sz=300x600300x250,1x1;' imgRange:{51105,45},'/photo/2014/1003/mlb_g_martinez_b1_110x62.jpg' imgRange:{5180141},'/photo/2014/1003/ny_____geno2_js_110x62.jpg' imgRange:{5249143},'/photo/2014/1002/nhl_g_fleury_b3_110x62.jpg' imgRange:{53201,44},'/photo/2014/1002/ny_g__betants_js_110x62.jpg' imgRange:{53902,42},'/photo/2014/1003/ny_g_murphy_js_110x62.jpg' 伊姆格兰奇:{54986,66},'http://a.espncdn.com/i/Integrators/shop.lebron.welcome.300x100.jpg'
source
好吗?你检查过了吗,NSLog'ed它了吗?它是零吗?@Zaph
source
对每个URL都是好的。这个URL似乎崩溃了(目前,过去有不同的),是编码不正确,应该是
NSISOLatin1StringEncoding
。从标题:“charset=iso-8859-1“。这就是为什么像Charles Proxy这样的网络分析器invaluable@Zaph是否有办法首先确定编码?是的,请使用Charles并查看显示“Content-type text/html;charset=iso-8859-1”的响应标题。查找iso-8859-1将导致您找到“Latin1String”“然后到
NSString
编码
NSISOLatin1StringEncoding
。请注意,通过添加
error
参数