我遇到了一个匹配的RegExKitLite表达式。我正在解析一个字符串,我希望它能抓住所有内容,直到第一次出现冒号
RegExKitLite中的表达式是什么?
谢谢!
答案 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];