2010-08-02 93 views
0

我有以下代码:NSRegularExpression的numberOfMatchesInString总是返回一个!

NSString *text = @"http://bit.ly/111 http://bit.ly/222 http://www.www.www"; 
NSRegularExpression *aLinkRegex = [NSRegularExpression regularExpressionWithPattern:@".*http://.*" options:NSRegularExpressionCaseInsensitive error:nil]; 
NSUInteger numberOfMatches = [aLinkRegex numberOfMatchesInString:text options:0 range:NSMakeRange(0, [text length])]; 

我想找到HTTP的的文本(我知道这是不是一个很好的正则表达式)的数目,但numberOfMatchesInString总是返回1,而它应该返回3上面的代码。

有人能告诉我上面的代码有什么问题吗?

干杯,

回答

1

只有一个比赛,因为你的正则表达式匹配的第一个http://.*“吃”的字符串的其余部分。

为什么不寻找更多的东西一样:

http:// 

,或者如果你想捕捉每一个URL完全,像:

http://[^ ]* 

此后意味着搜索任何内容HTTP:/ /那不是空间。

你应该真的看看通过某种正则表达式指导阅读。

+0

这解释了很多。我真的需要阅读更多关于正则表达式的知识。谢谢肯德尔,你是最棒的。 – Motasim 2010-08-02 05:26:24

+0

Mota:更好的办法是使用John Gruber的URL匹配正则表达式(假设它适用于NSRegularExpression)http://daringfireball.net/2010/07/improved_regex_for_matching_urls或Stephen Holt的AutoHyperlinks框架:https://bitbucket.org/sholt/autohyperlinks2/wiki /主页 – 2010-08-02 06:08:09

+1

我想提到的是,尽管如果他只是有一系列空格分隔的URL,更简单的方法将会便宜得多。 想想吧,如果是这样的话,他真的应该只使用componentsSeperatedByString – 2010-08-02 16:19:40