RegExKitLite表达式问题

时间:2009-07-18 01:56:21

标签: iphone objective-c regex

我遇到了一个匹配的RegExKitLite表达式。我正在解析一个字符串,我希望它能抓住所有内容,直到第一次出现冒号

RegExKitLite中的表达式是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

这个正则表达式将匹配从开始到(但不包括)第一个冒号的所有内容:

^[^:]*


包括第一个冒号就像把它放在最后一样简单:

^[^:]*:


因此,要使用RegexKitLite中的任何一个,您可以执行以下操作:

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

注意没有括号 - 因为*是贪婪的,你可以简单地使用否定的类并使用捕获的组0(即整个匹配)。


值得注意的是,大多数语言都包含允许您使用常规函数执行此操作的函数,例如ListFirst(MyString,':')MyString.split(':')[0]

我怀疑Objective-C有类似的东西......是的,请参阅here

NSString *string = @"oop:ack:bork:greeble:ponies";
NSArray *chunks = [string componentsSeparatedByString: @":"];

答案 1 :(得分:0)

要使用RegexKitLite专门执行此操作,您需要执行以下操作:

将RegexKitLite.h / .m文件添加到项目中

将RegexKitLite.h导入需要使用正则表达式的文件

使用以下内容获取冒号前的内容:

NSString * everythingBeforeTheColon = [someString stringByMatching:@"([^:]*):" capture:1];

答案 2 :(得分:0)

我刚刚更新了我的答案here,所以我想我会用它来标准标准基础组件SeparatedByString:和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

编辑:

我认为我会更好一点:如何使用RegexKitLite从包含多行冒号分隔数据(即/ etc / passwd)的字符串创建NSArray的NSArray。从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];