我在 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 测试器都成功匹配第三行并捕获了“mikeyward”。
Objective-C 代码:
NSString *loggedInPattern = @"(?:.+) \\[.+?\\] (.+) \\[.+?\\] logged in (?:.+)";
NSArray *captures = [searchString arrayOfCaptureComponentsMatchedByRegex:loggedInPattern];
NSString *username = [captures objectAtIndex:0];
问题: 尽管已检查以确保 searchString 有效并包含样本数据,但 RKL 无法匹配该行,更不用说捕获用户名了。在上面的示例中,抛出异常是因为返回的 captures 数组包含零个对象,并且我没有进行错误检查:)
任何帮助理解为什么正则表达式检查器确认匹配并捕获但 RKL 错过了它,我们将不胜感激。
谢谢~