使用NSScanner查找短语的下一个匹配项

我使用以下代码在我的HTML文件中查找某行代码:

NSURL *requestTimetableURL = [NSURL URLWithString:@"http://www.dhsb.org/index.phtml?d=201435"]; NSLog(@"Loaded Timetable"); NSError *error; NSString *page = [NSString stringWithContentsOfURL:requestTimetableURL encoding:NSASCIIStringEncoding error:&error]; [webView loadHTMLString:page baseURL:requestTimetableURL]; NSString* Period1; NSScanner *htmlScanner = [NSScanner scannerWithString:page]; [htmlScanner scanUpToString:@"

" intoString:NULL]; [htmlScanner scanString:@"

" intoString:NULL]; [htmlScanner scanUpToString:@"" intoString:&Period1]; period1label.text= Period1; NSLog(@"Collected Period 1 Data: %@", Period1); NSScanner *htmlScanner2 = [NSScanner scannerWithString:page]; NSString* Period2; [htmlScanner2 scanUpToString:@"

" intoString:NULL]; [htmlScanner2 scanString:@"

" intoString:NULL]; [htmlScanner2 scanUpToString:@"" intoString:&Period2]; period2label.text= Period2; NSLog(@"Collected Period 2 Data: %@", Period2);

您会注意到要查找的两个字符串都是相同的。 这是因为没有什么可以实际区分两行代码。 有两场比赛:

 

在我的代码中。 如何查找“Period1”的第一场比赛和“Period2”的第二场比赛?

谢谢!

在使用第二个扫描程序之前,将scanLocation设置为超出短语第一个实例的开头,如下所示:

[htmlScanner2 setScanLocation:(htmlScanner1.scanLocation + 1)];

编辑:只是一个想法 – 你为什么要使用两个扫描仪? 只需像这样使用一台扫描仪:

 NSURL *requestTimetableURL = [NSURL URLWithString:@"http://www.dhsb.org/index.phtml?d=201435"]; NSLog(@"Loaded Timetable"); NSError *error; NSString *page = [NSString stringWithContentsOfURL:requestTimetableURL encoding:NSASCIIStringEncoding error:&error]; [webView loadHTMLString:page baseURL:requestTimetableURL]; NSString* Period1; NSScanner *htmlScanner = [NSScanner scannerWithString:page]; [htmlScanner scanUpToString:@"

" intoString:NULL]; [htmlScanner scanString:@"

" intoString:NULL]; [htmlScanner scanUpToString:@"" intoString:&Period1]; period1label.text= Period1; NSLog(@"Collected Period 1 Data: %@", Period1); NSString* Period2; [htmlScanner scanUpToString:@"

" intoString:NULL]; [htmlScanner scanString:@"

" intoString:NULL]; [htmlScanner scanUpToString:@"" intoString:&Period2]; period2label.text= Period2; NSLog(@"Collected Period 2 Data: %@", Period2);