首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegExKitLite表达式问题

RegExKitLite表达式问题
EN

Stack Overflow用户
提问于 2009-07-18 01:56:21
回答 3查看 1.2K关注 0票数 1

我找不到匹配的RegExKitLite表达式。我正在解析一个字符串,我希望它获取所有内容,直到出现第一个冒号

在RegExKitLite中这样做的表达式是什么?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-18 02:08:09

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

代码语言:javascript
复制
^[^:]*

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

代码语言:javascript
复制
^[^:]*:

因此,要在RegexKitLite中使用这两种方法之一,您可以这样做:

代码语言:javascript
复制
NSString * firstItem = [someString stringByMatching:@"^[^:]*" capture:0];

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

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

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

代码语言:javascript
复制
NSString *string = @"oop:ack:bork:greeble:ponies";
NSArray *chunks = [string componentsSeparatedByString: @":"];
票数 1
EN

Stack Overflow用户

发布于 2009-07-18 02:14:01

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

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

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

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

代码语言:javascript
复制
NSString * everythingBeforeTheColon = [someString stringByMatching:@"([^:]*):" capture:1];
票数 0
EN

Stack Overflow用户

发布于 2009-07-18 03:15:42

我刚刚更新了我的SO答案here,所以我想我应该用它来对标准基金会componentsSeparatedByString:和RegexKitLites componentsSeparatedByRegex:进行基准测试。for each循环中的代码行(本质上)是:

代码语言:javascript
复制
NSString *string = @"oop:ack:bork:greeble:ponies";
for() { NSArray *chunks = [string componentsSeparatedByString: @":"]; }
for() { NSArray *chunks = [string componentsSeparatedByRegex: @":"]; }

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

代码语言:javascript
复制
componentsSeparatedByString: 3.96810us
componentsSeparatedByRegex:  2.46155us

编辑:

我想我会做得更好:如何使用RegexKitLite从包含多行冒号分隔数据(即/ NSArray / NSArrays )的字符串创建密码。根据RegexKitLite文档中的逗号分隔值示例进行了修改。完成后,变量splitLinesArray包含完成的产品。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1146464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档