我正在尝试从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)


发生问题是因为并非括号中的所有字符串部分都匹配,那些不匹配的范围超出了原始“单词”字符串的范围。

09-15 18:53