NSRegularExpression在Objective-C中

NSRegularExpression在Objective-C中,objective-c,iphone,regex,nsregularexpression,regex-group,Objective C,Iphone,Regex,Nsregularexpression,Regex Group,就像输入字符串(self)上面的代码一样: 我想获得[04:51.50][04:45.50][04:43.50][04:39.50]的for组,但我只能获得[04:39.50] 是NSRegularExpression只能在搜索($1)($2)($3)){2}时获取最后一个组重复的反向引用只捕获最后一个重复。您的正则表达式确实匹配最后一行中的所有四个实例,但它会用下一行覆盖每个匹配,只在末尾留下[04:39.50] 解决方案:重复非捕获组,并将重复结果放入捕获组: [04:30.50]There

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

我想获得
[04:51.50][04:45.50][04:43.50][04:39.50]
的for组,但我只能获得
[04:39.50]


NSRegularExpression
只能在搜索
($1)($2)($3)){2}

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

解决方案:重复非捕获组,并将重复结果放入捕获组:

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

((?:\\[(\\d{2}):(\\d{2})\\.(\\d{2})\\])+)(.+)
要首先匹配每一行,然后在迭代中将第二个正则表达式应用于
$1
,以提取分钟数等:

((?:\\[\\d{2}:\\d{2}\\.\\d{2}\\])+)(.+)
((?:\\[\\d{2}:\\d{2}\\.\\d{2}\\])+)(.+)
\\[(\\d{2}):(\\d{2})\\.(\\d{2})\\]