使用regexlite从NSString中解析<a href="" src="">Links</a>

时间:2010-01-04 04:33:02

标签: iphone objective-c regex

我正在编写一个iPhone应用程序,必须从网站上提取原始HTML数据,抓取链接的网址和链接的显示文本。

例如,在<a href="www.google.com">Click here to go to google</a>

它会抓住 url = www.google.com text =点击此处转到Google

我正在使用regexlite库,但我绝不是正则表达式方面的专家,我已经尝试了几个方法来实现这一点。

我想使用以下代码

NSString *searchString  = @"$10.23, $1024.42, $3099";
NSString *regexString   = @"\\$((\\d+)(?:\\.(\\d+)|\\.?))";
NSArray  *capturesArray = NULL;

capturesArray = [searchString arrayOfCaptureComponentsMatchedByRegex:regexString];

所以我的问题是有人可以告诉我searchString将解析html链接是什么或者指向一个关于regexlite如何工作的清晰教程我已经厌倦了阅读http://regexkit.sourceforge.net/RegexKitLite/的文档并且我不明白它。< / p>

提前致谢,

Zen_silence

3 个答案:

答案 0 :(得分:4)

简而言之,不要这样做。正则表达式是解析HTML的一种可怕方式。 HTML文档是高度结构化的,具有标记层次结构,其内容可以跨越线条而不会在呈现的形式中出现所述线条。

假设结构良好的HTML,您可以使用XML解析器。

特别是,iPhone提供了NSXMLParser以及其中一些很好的使用示例。

答案 1 :(得分:0)

searchString将是整个原始HTML文本,regexString应该更像:

NSString *regexString = @"href=\"(.*)\">(.*)<";

然后您将使用捕获匹配来拉出match1和match2,使用Range选项通过HTML文本重复匹配以进行搜索,以便您跳过已经搜索过的内容...

我不知道你在尝试用searchString和数字做什么。

答案 2 :(得分:0)

如果其他人有同样的问题,那么匹配html链接的正则表达式字符串是

NSString *regexString = @"<a href=([^>]*)>([^>]*) - ";

Oreilly的书“掌握正则表达式”帮助我快速解决这个问题,如果你正在尝试使用正则表达式,我强烈推荐阅读。