簡體   English   中英

NSRegularExpression enumerateMatchesInString:options:range:usingBlock:給出null結果?

[英]NSRegularExpression enumerateMatchesInString:options:range:usingBlock: giving a null result?

我在解析器中使用正則表達式,但是,它似乎給出了一個結果,這是我的代碼:正則表達式:

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,其中最后一個結果的位置= 0和長度= 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)

這是因為您使用帶有enumerateMatchesInString:options:range:usingBlock:NSMatchingReportCompletion選項enumerateMatchesInString:options:range:usingBlock: . 蘋果文檔

如果指定了NSMatchingReportCompletion匹配選項,則在匹配完成后將調用Block對象一次,結果為nil,並且在傳遞給Block的標志中設置NSMatchingCompleted匹配標志,以及NSMatchingHitEnd,NSMatchingRequiredEnd中的任何其他相關“NSMatchingFlags” ,或NSMatchingInternalError。

你看到最后一個塊調用作為一個位置和長度設置為0的范圍的原因是因為你發送消息到nil將返回nil (這是整數0)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM