RegExKitLite Выражение Вопрос - PullRequest
1 голос
/ 18 июля 2009

У меня проблемы с созданием выражения RegExKitLite, которое будет соответствовать. Я разбираю строку и хочу, чтобы она захватила все, пока не произойдет первое появление двоеточия

Каким было бы выражение в RegExKitLite для этого?

Спасибо!

Ответы [ 3 ]

1 голос
/ 18 июля 2009

Это регулярное выражение будет соответствовать всему от начала до (но исключая) первого двоеточия:

^[^:]*


Включить первое двоеточие так же просто, как поставить его в конец:

^[^:]*:


Итак, чтобы использовать любой из них с RegexKitLite, вы можете сделать:

NSString * firstItem = [someString stringByMatching:@"^[^:]*" capture:0];

Обратите внимание, что круглых скобок нет - поскольку * является жадным, вы можете просто использовать отрицательный класс и использовать захваченную группу 0 (т. Е. Все совпадение).


Стоит отметить, что большинство языков будут включать функции, которые позволяют вам делать это с обычной функцией, например ListFirst(MyString,':') или MyString.split(':')[0]

Я подозреваю, что Objective-C имеет нечто похожее на это ... да, смотрите здесь

NSString *string = @"oop:ack:bork:greeble:ponies";
NSArray *chunks = [string componentsSeparatedByString: @":"];
0 голосов
/ 18 июля 2009

Я только что обновил свой SO-ответ здесь , поэтому я решил использовать его для сравнения стандартных компонентов FoundationSeparatedByString: и RegexKitLites componentsSeparatedByRegex :. Строка кода внутри цикла for () для каждого была (по существу):

NSString *string = @"oop:ack:bork:greeble:ponies";
for() { NSArray *chunks = [string componentsSeparatedByString: @":"]; }
for() { NSArray *chunks = [string componentsSeparatedByRegex: @":"]; }

Возвращенные времена были (время в микросекундах на операцию):

componentsSeparatedByString: 3.96810us
componentsSeparatedByRegex:  2.46155us

EDIT:

Я подумал, что пойду лучше: как использовать RegexKitLite для создания NSArray из NSArrays из строки, содержащей несколько строк данных, разделенных двоеточиями (например, / etc / passwd). Изменено в примере значений, разделенных запятыми, в документации RegexKitLite. По завершении переменная splitLinesArray содержит готовый продукт.

NSString   *theString  = @"a:b:c\n1:2:3\nX:Y:Z\n"; // An example string to work on.
NSArray    *linesArray = [theString componentsSeparatedByRegex:@"(?:\r\n|[\n\v\f\r\\x85\\p{Zl}\\p{Zp}])"];
id          splitLines[[linesArray count]];
NSUInteger  splitLinesIndex = 0UL;

for(NSString *lineString in linesArray) { splitLines[splitLinesIndex++] = [lineString componentsSeparatedByRegex:@":"]; }

NSArray *splitLinesArray = [NSArray arrayWithObjects:splitLines count:splitLinesIndex];
0 голосов
/ 18 июля 2009

Чтобы сделать это специально с RegexKitLite, вам нужно сделать следующее:

Добавьте файлы RegexKitLite.h / .m в свой проект

Импортируйте RegexKitLite.h в файл, где вам нужно использовать регулярные выражения

Используйте следующее, чтобы взять вещи перед двоеточием:

NSString * everythingBeforeTheColon = [someString stringByMatching:@"([^:]*):" capture:1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...