在NSString中搜索Web链接

时间:2009-04-18 05:07:29

标签: objective-c regex iphone

我有一个带有网络链接的NSString。我需要找到以http://开头的字符串中的所有Web链接。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

方法

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script

使您能够运行自定义JavaScript。 JavaScript可能有权访问DOM,如果是这样,提取所有锚标记并返回它们应该很简单。

当然,我只编写了最小的iPhone应用程序,并且对JavaScript或DOM不太熟悉,所以我可能会离开这里。

查看DOM和JavaScript可能就像

一样简单
anchors = [htmlview_object stringByEvaluatingJavaScriptFromString @"document.anchors"];

但是,我再也不知道我在说什么。

试试这个:

javascript = @"function return_links() {\n"
"    var a = new Array;\n"
"    for (i = 0; i < document.anchors.length; i++) {\n"
"        a.push(document.anchors[i].href);\n"
"    }\n"
"    return a.join(\"\\n\");\n"
"}\n"
"return_links();\n";
links = [htmlview_object stringByEvaluatingJavaScriptFromString javascript];

答案 1 :(得分:0)

最好的方法是在NSString和HTML Parser中查找链接,请参阅Parsing HTML on the iPhone。如果您必须使用正则表达式(并且请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解您不应该使用的原因),PCRE似乎可用于iPhone。链接的常见且有缺陷的正则表达式为/href="(.*?)"/

当然,可用的最佳解析器可能是本机html查看小部件,因为它使您能够运行JavaScript(请参阅我对原始问题的原始答案),您应该能够从DOM中提取锚点( document.anchors)并使用document.write()和其他DOM方法编写/重写任何你需要的东西。