0
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循环中增加一个整数并在第二次迭代中将“had a”存储在NSString中的更简单的方法.

4

2 回答 2

3

对于正则表达式,返回的第一个匹配项是整个匹配字符串(“mary had a little”),然后是捕获的组(“had a”),这是标准的。

-captureComponentsMatchedByRegex:返回一个NSArray匹配项。所以,如果你想要第二个项目,或者第一个捕获的组:

NSString *match = [[myText captureComponentsMatchedByRegex:regexString] objectAtIndex:1]
于 2010-06-10T17:20:50.237 回答
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 ".

于 2010-06-10T18:15:26.287 回答