我在解析器中使用正则表达式,然而,它似乎给出了一个结果,这是我的代码: Regex:
self.seatSelectRegex = [NSRegularExpression regularExpressionWithPattern:@"Seat ([0-9]{1,2}): (.*) \\([$£€]?([0-9.]+) in chips\\).*$" options:NSRegularExpressionAnchorsMatchLines error:&error];代码:
NSMutableDictionary *players = [[NSMutableDictionary alloc] init];
[self.seatSelectRegex enumerateMatchesInString:input options:NSMatchingCompleted range:NSMakeRange(0, input.length) usingBlock:
^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
{
NSLog(@"%lu", result.range.length);
Player *p = [[Player alloc] init];
p.name = [input substringWithRange:[result rangeAtIndex:2]];
p.seatNumber = [input substringWithRange:[result rangeAtIndex:1]].intValue;
p.stack = [input substringWithRange:[result rangeAtIndex:3]].doubleValue;
[players setValue:p forKey:p.name];
}];我期望我的输入有3个结果,然而,我得到了4,其中最后一个结果的范围是location =0和length =0(前三个都是正确的)。这是常见的行为吗?我应该只检查范围的位置和长度,还是哪里有错误?
对于它的价值,这是我的输入:
PokerStars Hand #81669312371: Hold'em No Limit ($0.01/$0.02 USD) - 2012/06/08 16:57:33 CET [2012/06/08 10:57:33 ET]
Table 'Icarus III' 6-max Seat #2 is the button
Seat 2: SanderDecler ($2 in chips)
Seat 3: ehrli87 ($0.90 in chips)
Seat 4: umar.11 ($1.60 in chips)
ehrli87: posts small blind $0.01
umar.11: posts big blind $0.02
*** HOLE CARDS ***
Dealt to SanderDecler [Kh 7d]
SanderDecler: raises $0.04 to $0.06
ehrli87: folds
umar.11: calls $0.04
*** FLOP *** [Jc Tc Jh]
umar.11: checks
SanderDecler: bets $0.08
umar.11: raises $0.24 to $0.32
SanderDecler: folds
Uncalled bet ($0.24) returned to umar.11
umar.11 collected $0.28 from pot
*** SUMMARY ***
Total pot $0.29 | Rake $0.01
Board [Jc Tc Jh]
Seat 2: SanderDecler (button) folded on the Flop
Seat 3: ehrli87 (small blind) folded before Flop
Seat 4: umar.11 (big blind) collected ($0.28)发布于 2012-06-09 23:07:28
这是因为您在enumerateMatchesInString:options:range:usingBlock:中使用了NSMatchingReportCompletion选项。来自Apples documentation
如果指定了NSMatchingReportCompletion匹配选项,则块对象将在匹配完成后调用一次,结果为空,并且在传递给块的标志中设置了NSMatchingCompleted匹配标志,以及NSMatchingHitEnd、NSMatchingRequiredEnd或NSMatchingInternalError中的任何其他相关“NSMatchingFlags”。
您将最后一个块调用视为位置和长度设置为0的范围的原因是,您将消息发送到将返回nil (即整数0)的nil。
https://stackoverflow.com/questions/10961779
复制相似问题