NSRegularExpression的多个匹配项

时间:2012-07-13 10:05:34

标签: objective-c regex ios5 xcode4.3 nsregularexpression

我有以下正则表达式匹配:

NSString *pattern=[NSString stringWithFormat:@"%@(.*)%@", key, key2];

所以说if key=\\\\[\\\\\[ and key2=\\\\]\\\\]然后我得到包含的字符串 键和包含的文本。但问题是,如果有多个匹配,那么它只需要关键字的出现和key2的最后一次出现,并给出包含在键和键之间的文本。例如:这是[[some]] [[text]]。这给了我:[[some]] [[text]]作为一个匹配,而我希望[[some]][[text]]作为单独的匹配。我应该如何修改它以单独给出所有匹配?

1 个答案:

答案 0 :(得分:1)

同样的事情困扰新手解析器制造商,他们想在引号之间解析字符串,并认为

\\".*\\"

就足够了,但是当匹配

之间的所有文本时,会感到惊讶
"a string" and also "another string"

背后的原因是*运算符是 greedy 。您必须使用字符集否定来实现预期结果:

\\[\\[[^\\[\\]]*\\]\\]

希望这有帮助。