首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C中的NSRegularExpression

问Objective-C中的NSRegularExpression
EN

Stack Overflow用户
提问于 2011-10-13 13:08:42
回答 1查看 623关注 0票数 0
代码语言:javascript
复制
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(\\[(\\d{2}):(\\d{2})\\.(\\d{2})\\])+(.+)" options:NSRegularExpressionAllowCommentsAndWhitespace error:&error];

[regex enumerateMatchesInString:self options:NSMatchingReportProgress range:NSMakeRange(0, [self length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
        [*lyricObject addObject:[self substringWithRange:[match rangeAtIndex:5]]];
        NSLog(@"%@",[self substringWithRange:[match rangeAtIndex:1]]);
        [*stamp addObject:[NSString stringWithFormat:@"%d", ([[self substringWithRange:[match rangeAtIndex:2]] intValue] * 60  +  [[self substringWithRange:[match rangeAtIndex:3]] intValue] ) * 100 + [[self substringWithRange:[match rangeAtIndex:4]] intValue]]];
}];

就像上面的代码一样,输入字符串(Self)是:

代码语言:javascript
复制
[04:30.50]There are pepole dying
[04:32.50]If you care enough for the living
[04:35.50]Make a better place for you and for me
[04:51.50][04:45.50][04:43.50][04:39.50]You and for me

我想获得[04:51.50][04:45.50][04:43.50][04:39.50]的组,但我只能在[04:39.50]上获得最后一个组

当我搜索(($1)($2)($3)){2}时,NSRegularExpression只能获取最后一个组吗

EN

回答 1

Stack Overflow用户

发布于 2012-03-04 19:27:01

重复的反向引用只捕获最后一次重复。您的正则表达式确实匹配最后一行中的所有四个实例,但是它会用下一个匹配覆盖每个匹配,最后只留下[04:39.50]。

解决方案:重复一个非采集分组,将重复结果放入采集分组:

代码语言:javascript
复制
((?:\\[(\\d{2}):(\\d{2})\\.(\\d{2})\\])+)(.+)

当然,您仍然只能在最后一次重复时通过$4访问$2 --但这是正则表达式的一般限制。如果需要单独访问每个匹配,直到分钟/秒/帧部分,则使用

代码语言:javascript
复制
((?:\\[\\d{2}:\\d{2}\\.\\d{2}\\])+)(.+)

首先匹配每一行,然后在迭代中对$1应用第二个正则表达式,以提取分钟数等:

代码语言:javascript
复制
\\[(\\d{2}):(\\d{2})\\.(\\d{2})\\]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7749701

复制
相关文章

相似问题

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