2012-06-16 45 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