Как перечислить все именованные захваты в RegexKit? - PullRequest
0 голосов
/ 09 ноября 2010

Я недавно хотел использовать регулярные выражения в приложении Какао. Но я обнаружил, что Какао не включает в себя класс регулярных выражений. Поэтому я решил использовать 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, например ::1012*

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 Ответ

1 голос
/ 09 ноября 2010

Посмотрите документацию по Перечисление всех совпадений в строке по регулярному выражению .В частности, вы хотите узнать о классе RKEnumerator .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...