【问题标题】:Find an Url in a NSString or find a String between two Strings在 NSString 中查找 Url 或在两个字符串之间查找字符串
【发布时间】:2010-01-14 19:39:29
【问题描述】:

我有一个包含以下内容的 NSString:

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

现在我想在没有所有其他字符串的情况下将 twitpic-Url 放入一个新的 NSString 中。我怎样才能做到这一点?我可以在 NSStrings 中搜索吗?喜欢:找到字符串之间的字符串?或者我可以直接在 NSString 中找到 URL 吗?

感谢您的帮助!

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    使用正则表达式: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"
    )
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-03
        • 2011-03-23
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 2021-05-07
        相关资源
        最近更新 更多