我遇到了将会匹配的RegExKitLite表达式。我正在解析一个字符串,我希望它抓住所有东西,直到遇到第一个冒号RegExKitLite表达式问题
RegExKitLite中的表达式会这样做吗?
谢谢!
我遇到了将会匹配的RegExKitLite表达式。我正在解析一个字符串,我希望它抓住所有东西,直到遇到第一个冒号RegExKitLite表达式问题
RegExKitLite中的表达式会这样做吗?
谢谢!
此正则表达式匹配一切从一开始,直到(但不包括)第一个冒号:
^[^:]*
包括第一个冒号是把它放在结尾一样简单:
^[^:]*:
因此,为使用那些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: @":"];
要使用专门RegexKitLite做到这一点,你需要做到以下几点:
添加回复gexKitLite.h/.m文件到您的项目
导入RegexKitLite.h到该文件中,你需要使用正则表达式
使用以下冒号前抢东西:
NSString * everythingBeforeTheColon = [someString stringByMatching:@"([^:]*):" capture:1];
我相当肯定,不需要括号 - 你可以删除他们,只使用组0.(假设*是正常的贪婪,尾部冒号是多余的,可以被删除,如果是的话,组1是与组0相同,因此不需要额外的分组)。 – 2009-07-18 02:30:03
我刚刚更新了我的答案here,所以我想我会用它来标准基础组件SegmentByString:和RegexKitLites componentsSeparatedByRegex:进行基准测试。的代码为()循环为每个内的线是(基本上):
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];
太棒了...谢谢 – Xcoder 2009-07-18 02:44:38