2012-09-25 24 views
0

我有以下格式一些文字:Objective C的正則表達式令牌化的句子

{{st1:[[word1]]-[[word2]]s [[word1]] [[word3]]}} {{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}} 

我想篩選出的句子(簽名{{st[0-9]: }})包含給定字(簽名[[word]])。因此,如果我尋找[[word1]],輸出應該是

{{st1:[[word1]]-[[word2]]s [[word1]] [[word3]]}} 
{{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}} 

而如果我在尋找[[word4]],輸出應該是

{{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}} 

到目前爲止,我寫了下面的代碼,但不能達到上述目的。請幫我改正它。

NSString* aString = @"{{st1:[[word1]]-[[word2]]s [[word1]] [[word3]]}} {{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}}"; 
NSString *regexString = @"\\{\\{st[1-9]:.*(word).*\\}\\}"; 
for(NSString *match in [aString componentsMatchedByRegex:regexString]) 
    NSLog(@"%@", match); 

我正在使用RegexKitLite,但我對任何其他建議都開放。

回答

0

與您當前的正則表達式的問題是,.*將在句末匹配}},你需要確保你的正則表達式的內部不能繼續過去}},這裏是做的一種方式這樣的:

\\{\\{st[1-9]:[^}]*(word)[^}]*\\}\\} 

如果一個右大括號是一個字的一部分,它變得更復雜一點的有效字符,但你應該能夠(\}?[^}])*(?:(?!\}\}).)*更換[^}]*