Iphone 正则表达式问题

Iphone 正则表达式问题,iphone,objective-c,regex,Iphone,Objective C,Regex,我很难找到匹配的正则表达式。我正在解析一个字符串,我想让它抓取所有内容,直到第一次出现冒号为止 RegExKitLite中的表达式是什么 谢谢 此正则表达式将匹配从开始到(但不包括)第一个冒号的所有内容: ^[^:]* 要包含第一个冒号,只需将其放在末尾即可: ^[^:]*: 因此,要将其中一个与RegexKitLite一起使用,可以执行以下操作: NSString * firstItem = [someString stringByMatching:@"^[^:]*" capture:

我很难找到匹配的正则表达式。我正在解析一个字符串,我想让它抓取所有内容,直到第一次出现冒号为止

RegExKitLite中的表达式是什么


谢谢

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

^[^:]*

要包含第一个冒号,只需将其放在末尾即可:

^[^:]*:

因此,要将其中一个与RegexKitLite一起使用,可以执行以下操作:

NSString * firstItem = [someString stringByMatching:@"^[^:]*" capture:0];
注意没有括号-因为*是贪婪的,所以您可以简单地使用否定类并使用捕获的组0(即整个匹配)


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

我怀疑Objective-C与此类似。。。是的,看到了吗


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

^[^:]*

要包含第一个冒号,只需将其放在末尾即可:

^[^:]*:

因此,要将其中一个与RegexKitLite一起使用,可以执行以下操作:

NSString * firstItem = [someString stringByMatching:@"^[^:]*" capture:0];
注意没有括号-因为*是贪婪的,所以您可以简单地使用否定类并使用捕获的组0(即整个匹配)


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

我怀疑Objective-C与此类似。。。是的,看到了吗


要特别使用RegexKitLite执行此操作,您需要执行以下操作:

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

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

使用以下方法抓取冒号前的内容:

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

要特别使用RegexKitLite执行此操作,您需要执行以下操作:

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

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

使用以下方法抓取冒号前的内容:

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

我刚刚更新了我的SO答案,所以我想我会用它来对标准的基础组件StutabyByStudio和RexKiTyLes组件进行分离。for()循环中每个循环的代码行(基本上)是:

返回的时间为(每次操作的时间单位为微秒):

编辑:

我认为我应该做得更好:如何使用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];

我刚刚更新了我的SO答案,所以我想我会用它来对标准的基础组件StutabyByStudio和RexKiTyLes组件进行分离。for()循环中每个循环的代码行(基本上)是:

返回的时间为(每次操作的时间单位为微秒):

编辑:

我认为我应该做得更好:如何使用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];

我相当确定不需要括号-您可以删除它们,只使用组0。(假设*像正常情况一样贪婪,后面的冒号是多余的,可以删除,如果是这样,那么组1与组0相同,因此不需要额外的分组)。@Peter有趣的是,我从未想过这样做。我更喜欢用括号括起来,这样我才能确定我得到了什么我相当确定不需要括号-您可以删除它们,只使用组0。(假设*像正常情况一样贪婪,后面的冒号是多余的,可以删除,如果是这样,那么组1与组0相同,因此不需要额外的分组)。@Peter有趣的是,我从未想过这样做。我更喜欢用括号括起来,这样我才能确定我得到了什么