我正在尝试从METAR天气预报(从http://weather.noaa.gov/pub/data/observations/metar/cycles/下载)中捕获风的描述,并从该块中获取风的成分(如果匹配)。正则表达式为@"^([0-9]{3}|VRB)([0-9]{2,3})G?([0-9]{2,3})?(KT|MPS|KMH)"
。
我正在使用PDRegex库将捕获的匹配枚举到数组中。 (可以在https://github.com/carlbrown/RegexOnNSString/blob/master/RegexOnNSString/NSString%2BPDRegex.m上找到PDRegex库)
这些是我代码中的适用行:
word = @"16008KT"; //test block
NSArray *matches = [word stringsByExtractingGroupsUsingRegexPattern:@"^([0-9]{3}|VRB)([0-9]{2,3})G?([0-9]{2,3})?(KT|MPS|KMH)"];
当
stringsByExtractingGroupsUsingRegexPattern
(PDRegex方法)被调用并匹配时,它在NSString+PDRegex
的第62行崩溃。这是应用程序崩溃的PDRegex行:NSString *matchedString=[self substringWithRange:[result rangeAtIndex:i]];
这是当机报告:
由于未捕获的异常“ NSRangeException”而终止应用程序,原因:
'-[__ NSCFString substringWithRange:]:范围或索引超出范围'
最佳答案
我通过在有问题的行上方添加以下检查来解决该问题:
if ([result rangeAtIndex:i].length!=0)
发生问题是因为并非括号中的所有字符串部分都匹配,那些不匹配的范围超出了原始“单词”字符串的范围。