2012-06-16 47 views
0
//string 
NSString *haystack = @".test {test:test} .test2{dasf:asdF}"; 
//pattern 
NSString *needle = @"[^{}]*{[^{}]*}"; 

我從該想要的是。測試{測試:測試}和{.test2 dasf:ASDF}在一個數組(該代碼的其餘部分處理這個)但由於某種原因此正則表達式無法正常工作,因爲沒有找到結果。正則表達式表達的目標C不工作

如果

NSString *needle = @"[^{}]*"; 

我得到以下

(
".test ", 
"", 
"test:test", 
"", 
" .test2", 
"", 
"dasf:asdF", 
"", 
"" 
) 

預計。經過大量的擺弄之後,它似乎是{和}在正則表達式中的一個問題,但我想不出爲什麼。

令人難以置信的是,如果任何人都可以解釋爲什麼我會在上面的數組中獲得這些空元素,那麼這對於知道這些元素也是有用的。

謝謝!

回答

0

你會嘗試使用也是零字符:

NSString *needle = @"[^{}]*\{[^{}]*\}"; 

確實,{}在regexs特殊含義(但他們那種「自動」逃脫內[]使用時)

+0

嗯..沒有運氣,不要認爲}需要逃跑。它通過這個: 警告:未知的轉義序列'\}'。不管怎麼說,還是要謝謝你! – neutrino

+0

那麼:NSString * needle = @「[^ {}] + [{] [^ {}] + [}]」; – sergio

+0

是的!謝謝!現在爲什麼它需要這個? []圍繞{}的?這是逃避沒有\的方式嗎? – neutrino

1

你試過[^ {}] +(加上)而不是[^ {}] *嗎?只是因爲*匹配

+0

好啊!在最後回答我的輔助問題..我的主要問題的任何想法?謝謝。 – neutrino

+0

那麼,因爲{}是正則表達式中的特殊字符 - 您可以指定與它們匹配的數量。所以{17}意味着「一個」17次。你只需要逃避它們,即[^ {}] + \ {[^ {}] + \} – disjunction