Objective C - RegexKitLite - 解析字符串的内部内容,即:start(。*?)end

时间:2010-06-10 17:11:15

标签: objective-c regex parsing regexkitlite

NSString *myText = @"mary had a little lamb";
NSString *regexString = @"mary(.*?)little";

for(NSString *match in [myText captureComponentsMatchedByRegex:regexString]){

NSLog(@"%@",match);

}

这将向控制台输出两件事:

1)“玛丽有一点点” 2)“有一个”

我想要的只是第二位信息“有一个”。是否存在匹配字符串并仅返回内部部分的方法?

我对Objective C很新,这感觉是一个相当微不足道的问题但我找不到这样做比在for循环中增加一个整数和在存储“有一个”的第二次迭代中更简洁的方法在NSString中。

2 个答案:

答案 0 :(得分:3)

使用正则表达式,返回的第一个匹配是整个匹配的字符串(“mary有一点”)是标准的,然后下一个项目是捕获的组(“有一个”)。

-captureComponentsMatchedByRegex:会返回NSArray个匹配项。因此,如果您想要第二个项目或第一个捕获的组:

NSString *match = [[myText captureComponentsMatchedByRegex:regexString] objectAtIndex:1]

答案 1 :(得分:1)

captureComponentsMatchedByRegex:返回正则表达式首次匹配的所有捕获。数组索引(又名捕获)0是“正则表达式匹配的所有文本”。如果正则表达式包含其他捕获组,正如您的正则表达式所做的那样,那些数组索引从1开始,并继续执行正则表达式中存在的尽可能多的捕获组。

您可能想要的是componentsMatchedByRegex:capture:方法。此方法返回其发送到的字符串中所有匹配项的数组,并且还允许您指定用于创建结果数组的捕获组。例如:

NSString *myText = @"mary had a little lamb";
NSString *regexString = @"mary(.*?)little";

for(NSString *match in [myText componentsMatchedByRegex:regexString capture:1L]) {
  NSLog(@"%@",match);
}

以上内容仅打印" had a "