在NSString中查找URL或在两个字符串之间查找字符串

时间:2010-01-14 19:39:30

标签: iphone objective-c

我有一个带有此内容的NSString:

<?xml version="1.0" encoding="UTF-8"?>
<rsp stat="ok">
 <mediaid>y2q62</mediaid>
 <mediaurl>http://twitpic.com/url</mediaurl>
</rsp>

现在我希望在没有所有其他字符串的情况下在新的NSString中获取twitpic-Url。我该怎么做?我可以在NSStrings中搜索吗?喜欢:找到字符串之间的字符串?或者我可以直接在NSString中找到URL吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

使用正则表达式:RegexKitLite

以下是使用HTTP matching URL from the RegexKitLite documentation的完整示例。 RegexKitLite -componentsMatchedByRegex:方法将返回它在字符串中找到的所有URL匹配的NSArray

#import <Foundation/Foundation.h>
#import "RegexKitLite.h"

int main(int argc, char *argv[]) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  NSString *stringToSearch =
    @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
    @"<rsp stat=\"ok\">\n"
    @" <mediaid>y2q62</mediaid>\n"
    @" <mediaurl>http://twitpic.com/url</mediaurl>\n"
    @"</rsp>\n";

  NSString *urlRegex = @"\\bhttps?://[a-zA-Z0-9\\-.]+(?:(?:/[a-zA-Z0-9\\-._?,'+\\&%$=~*!():@\\\\]*)+)?";

  NSArray *matchedURLsArray = [stringToSearch componentsMatchedByRegex:urlRegex];

  NSLog(@"matchedURLsArray: %@", matchedURLsArray);

  [pool release];
  pool = NULL;

  return(0);
}

编译并运行:

shell% gcc -arch i386 -o url url.m RegexKitLite.m -framework Foundation -licucore
shell% ./url
2010-01-14 16:05:32.874 url[71582:903] matchedURLsArray: (
    "http://twitpic.com/url"
)

答案 1 :(得分:0)

将字符串转换为NSData后使用NSXMLParser。