代码之家  ›  专栏  ›  技术社区  ›  StuR

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

  •  0
  • StuR  · 技术社区  · 14 年前
    NSString *myText = @"mary had a little lamb";
    NSString *regexString = @"mary(.*?)little";
    
    for(NSString *match in [myText captureComponentsMatchedByRegex:regexString]){
    
    NSLog(@"%@",match);
    
    }
    

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

    2) “有一个”

    我想要的只是第二点信息“有一个”。有没有一种方法可以匹配字符串并只返回内部部分?

    2 回复  |  直到 11 年前
        1
  •  3
  •   jtbandes    14 年前

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

    -captureComponentsMatchedByRegex: 返回一个 NSArray 所有的火柴。因此,如果您想要第二个项目,或者第一个捕获的组:

    NSString *match = [[myText captureComponentsMatchedByRegex:regexString] objectAtIndex:1]
    
        2
  •  1
  •   johne    14 年前

    captureComponentsMatchedByRegex: 返回正则表达式第一个匹配项的所有捕获。数组索引(aka capture) 0 是“所有文本都与regex匹配”。如果regex包含额外的捕获组,就像您的regex一样,那么这些数组索引从1开始,并对regex中存在的尽可能多的捕获组继续。

    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 " .

    推荐文章