Cocoa アプリで RKL を使用して、ラップされたタスクからログ ステートメントを解析しています。
パターン:
(?:.+) \[.+?\] (.+) \[.+?\] logged in (?:.+)
テストデータ:
2011-07-11 00:48:19 [INFO] Preparing spawn area: 97
2011-07-11 00:48:19 [INFO] Done (2175837000ns)! For help, type "help" or "?"
2011-07-11 00:48:42 [INFO] mikeyward [/127.0.0.1:59561] logged in with entity id blahblah
私がインターネットで試したすべての RegEx テスターは、3 行目に一致し、「mikeyward」をキャプチャします。
Objective-C コード:
NSString *loggedInPattern = @"(?:.+) \\[.+?\\] (.+) \\[.+?\\] logged in (?:.+)";
NSArray *captures = [searchString arrayOfCaptureComponentsMatchedByRegex:loggedInPattern];
NSString *username = [captures objectAtIndex:0];
問題: searchString が有効で、サンプル データが含まれていることを確認したにもかかわらず、RKL はユーザー名をキャプチャするどころか、行を一致させることができません。上記の例では、captures 配列がゼロ オブジェクトで返され、エラー チェックを行っていないため、例外がスローされます :)
正規表現チェッカーが一致を確認してキャプチャするのに、RKL がそれを見逃す理由を理解するための支援をいただければ幸いです。
ありがとう〜