如何在RegexKit中枚举所有命名的捕获?

时间:2010-11-09 12:07:50

标签: objective-c regex cocoa

我最近想在Cocoa app中使用正则表达式。但我发现Cocoa不包含正则表达式类。所以我决定使用RegexKit(OgreKit很好,但我不知道为什么它在我的OSX 10.6.4 x86_64上运行不正常。)

我的文件内容如下:

12:20:30 - 01:20:30
some text
11:20:30 - 04:20:30
some text

我想要获取所有时间值和文本值。我在指南中找到了这个示例代码:

NSString *entireMatchString = NULL, *totalString = NULL, *dollarsString = NULL, *centsString = NULL;
NSString *regexString = @"owe:\\s*\\$?(?<total>(?<dollars>\\d+)\\.(?<cents>\\d+))";

[@"You owe: 1234.56 (tip not included)" getCapturesWithRegexAndReferences:regexString,@"$0", &entireString,@"${total}", &totalString,@"${dollars}", &dollarsString,@"${cents}",&centsString,nil];

// entireString  = @"owe: 1234.56";
// totalString   = @"1234.56";
// dollarsString = @"1234";
// centsString   = @"56";

所以我写了一个正则表达式字符串

NSString *regexString = @"\\s*\\n*(?<start>\\d\\d:\\d\\d:\\d\\d*)\\s*-\\s*(?<end>\\d\\d:\\d\\d:\\d\\d*)\\s*\\n*(?<text>.*)

它工作正常,但它只能工作一次。我需要像在Ogrekit中那样获取所有命名的捕获,例如:

OGRegularExpression *regex = [OGRegularExpression regularExpressionWithString:@"<video src=\"(?<imageURL>.+)\".+>"
 options:OgreCaptureGroupOption
 syntax:OgreRubySyntax
 escapeCharacter:OgreBackslashCharacter];

NSArray *matches = [regex allMatchesInString:@"<video src=\"http://test.com/hello.jpg\">"];

if (matches != nil && ([matches count] == 1))
{
 OGRegularExpressionMatch *match = [matches objectAtIndex: 0];
 NSString *result = [match substringNamed:@"ImageURL"];
 // : http://test.com/hello.jpg
}

很容易从匹配数组中找到所有命名的捕获值。有人知道怎么做RegexKit?感谢。

1 个答案:

答案 0 :(得分:1)

查看Enumerating all the Matches in a String by a Regular Expression下的文档。具体来说,您想了解RKEnumerator课程。