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中。
答案 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 "
。