Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 试图找到一种比正则表达式更快的方法来查找URL';在一个字符串中。。。有什么想法吗?_Iphone_Objective C_Ios_Xcode_Cocoa Touch - Fatal编程技术网

Iphone 试图找到一种比正则表达式更快的方法来查找URL';在一个字符串中。。。有什么想法吗?

Iphone 试图找到一种比正则表达式更快的方法来查找URL';在一个字符串中。。。有什么想法吗?,iphone,objective-c,ios,xcode,cocoa-touch,Iphone,Objective C,Ios,Xcode,Cocoa Touch,我有一个NSString,它来自一个HTML页面,长度为37014个字符,其中大约有20个URL。我使用此代码查找URL并将其放置在NSArray: NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\\.(?:jpg|gif|png))(?:\\?([^#]*))?(?:#(.*))?"

我有一个
NSString
,它来自一个HTML页面,长度为37014个字符,其中大约有20个URL。我使用此代码查找URL并将其放置在
NSArray

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\\.(?:jpg|gif|png))(?:\\?([^#]*))?(?:#(.*))?"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];
NSArray *matches = [regex matchesInString:final
                                  options:0
                                    range:NSMakeRange(0, [final length])];
问题是,即使在iPhone4S上,代码也需要5秒钟才能执行。这对一页来说太慢了。。。我需要浏览20个HTML页面


有没有更快的办法?可能是
NSScanner
NSRange
?有人有什么创意吗?

NSTextCheckingTypeLink

看看你的正则表达式有点极端。它不会很快就失败,因为你可能会确定这些东西是不匹配的。从粗略的角度来看,看起来您正在对整个字符串进行几乎N^2的搜索。你应该尽可能早地消除匹配

你真的希望你的URL以非单词边界开始吗

你的正则表达式太笼统了。分析您的数据,看看您是否真的希望解析如此自由的URL。最后,您最好使用几个早期失败的正则表达式,而不是一个复杂到几乎匹配所有内容的正则表达式


另外,请确保在下载数据的后台线程中执行此操作。与下载相比,您的搜索应该不会花费太长时间-尽管搜索37k字节需要5秒。。。我的眼睛几乎可以做到这一点。

自动超链接(https://bitbucket.org/sholt/autohyperlinks2/overview)这是一个非常好的库。

只是一个问题-您是否100%确定上面的代码需要5秒才能运行?大约5秒。。。也许四点。但是,是的,在一台设备上,这需要花费很长时间。在模拟器上它运行得很快,因为它是在计算机上运行的。比我的速度快得多。非常感谢!我使用[[myString pathExtension]isEqualToString:@“jpg”]来检测URL是否以我想要的扩展名结尾。