从HTML中提取URL并保留文本(如果有)

时间:2015-03-17 11:19:29

标签: html ios xcode

我有一个字符串,每次字符串都会改变。我想要一个代码,它将从HTML中提取url。如果有一些文本,我想将文本保存在一个字符串中,将URL保存在另一个字符串中

一个例子

string = <div class=\"separator\" style=\"clear: both; text-align: center;\">\n<a href=\"http://4.bp.blogspot.com/-K7vl-ShXrNc/VQU-D0NTFgI/AAAAAAAAAOg/aBIUOwF2nEQ/s1600/contact.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" src=\"http://4.bp.blogspot.com/-K7vl-ShXrNc/VQU-D0NTFgI/AAAAAAAAAOg/aBIUOwF2nEQ/s1600/contact.png\" /></a></div>\n<br />

提取的网址= http://4.bp.blogspot.com/-K7vl-ShXrNc/VQU-D0NTFgI/AAAAAAAAAOg/aBIUOwF2nEQ/s1600/contact.png

我将如何在Xcode中执行此操作

编辑: 我的代码

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.eventNamesArray = [NSMutableArray array];
    self.eventsDictionary = [NSMutableDictionary dictionary];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self searchForEvents];
}

//Json Parsing
- (void)searchForEvents
{

    NSString *eventsSearchUrlString = [NSString stringWithFormat:@"https://www.googleapis.com/blogger/v3/blogs/1562818803553764290/posts?key=AIzaSyBTOxz-vPHgzIkw9k88hDKd99ILTaXTt0Y"];
    NSURL *eventsSearchUrl = [NSURL URLWithString:eventsSearchUrlString];
    NSURLRequest *eventsSearchUrlRequest = [NSURLRequest requestWithURL:eventsSearchUrl];

    NSURLSession *sharedUrlSession = [NSURLSession sharedSession];
    NSURLSessionDataTask *searchEventsTask =
    [sharedUrlSession dataTaskWithRequest:eventsSearchUrlRequest completionHandler:
     ^(NSData *data, NSURLResponse *response, NSError *error)
     {
         dispatch_async(dispatch_get_main_queue(),
                        ^{
                            [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

                            if(error)
                            {
                                UIAlertView *searchAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please check your internet connection" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                                [searchAlertView show];
                            }
                            else
                            {
                                NSError *jsonParseError = nil;
                                NSDictionary *jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonParseError];

                                if(jsonParseError)
                                {
                                    UIAlertView *jsonParseErrorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:jsonParseError.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                                    [jsonParseErrorAlert show];
                                }
                                else
                                {
                                    [self.eventNamesArray removeAllObjects];
                                    [self.eventsDictionary removeAllObjects];

                                    NSArray *searchResultsArray = [jsonDictionary objectForKey:@"items"];
                                    NSLog(@"test%@",searchResultsArray);


                                    for(NSDictionary *eventsInfoDictionary in searchResultsArray)
                                    {
                                        Events *event = [[Events alloc] init];
                                        event.eventName = [eventsInfoDictionary objectForKey:@"title"];
                                        event.eventDescription =[eventsInfoDictionary objectForKey:@"content"];
                                        stringWithURL = [eventsInfoDictionary objectForKey:@"content"];

                                        NSString *eventsAsStrings = [event.eventName substringToIndex:event.eventName.length];
                                        NSMutableArray *eventsInArray = [self.eventsDictionary objectForKey:eventsAsStrings];

                                        if(!eventsInArray)
                                        {
                                            eventsInArray = [NSMutableArray array];
                                            [self.eventNamesArray addObject:eventsAsStrings];
                                        }

                                        [eventsInArray addObject:event];

                                        [self.eventsDictionary setObject:eventsInArray forKey:eventsAsStrings];

                                        if ([event.eventDescription containsString:@"<br />"]) {
                                            NSString* eventDescrip = event.eventDescription;
                                            NSString* stringWithoutHTMLtags = [eventDescrip stringByReplacingOccurrencesOfString:@"<br />" withString:@""];
                                            event.eventDescription = stringWithoutHTMLtags;
                                        }

                                        }
                                        NSLog(@"Event Name : %@", event.eventName);
                                        NSLog(@"Event Description : %@", event.eventDescription);

                                    }

                                    [self.eventNamesArray sortedArrayUsingComparator:^NSComparisonResult(Events *obj1, Events *obj2) {
                                        Events *time1 = obj1;
                                        Events *time2 = obj2;
                                        if (time1 > time2) {
                                            return (NSComparisonResult)NSOrderedDescending;
                                        }
                                        else if (time1 < time2) {
                                            return (NSComparisonResult)NSOrderedAscending;
                                        }
                                        return (NSComparisonResult)NSOrderedSame;
                                    }];
                                    [self.tableView reloadData];

                                }
                            }
                        });
     }];

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    [searchEventsTask resume];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
    if (searchText.length == 0) {
        isFiltered = NO;
    }
    else {
        isFiltered = YES;
    }
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] %@",searchText];
    self.filteredEventsArray = [eventNamesArray filteredArrayUsingPredicate:pred];
    [self.tableView reloadData];
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    [searchBar resignFirstResponder];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    if (isFiltered == YES) {
        return filteredEventsArray.count;
    }
    else {
        return self.eventNamesArray.count;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSArray *eventsWithFirstLetter;
    if (isFiltered == YES) {
        NSString *firstLetter = [self.filteredEventsArray objectAtIndex:section];
        eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter];
        return eventsWithFirstLetter.count;
    }
    else {
        NSString *firstLetter = [self.eventNamesArray objectAtIndex:section];
        eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter];
        return eventsWithFirstLetter.count;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"eventTitleCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    Events *event;
    if (isFiltered == YES) {
        NSString *firstLetter = [self.filteredEventsArray objectAtIndex:indexPath.section];
        NSArray *eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter];
        event = [eventsWithFirstLetter objectAtIndex:indexPath.row];
        cell.textLabel.text = event.eventName;
    }
    else {
        NSString *firstLetter = [self.eventNamesArray objectAtIndex:indexPath.section];
        NSArray *eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter];
        event = [eventsWithFirstLetter objectAtIndex:indexPath.row];
        cell.textLabel.text = event.eventName;
    }
    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *firstLetter = [self.eventNamesArray objectAtIndex:indexPath.section];
    NSArray *eventsWithFirstLetter = [self.eventsDictionary objectForKey:firstLetter];
    Events *event = [eventsWithFirstLetter objectAtIndex:indexPath.row];

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    DescriptionViewController *descriptionViewController = (DescriptionViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"descriptionController"];
    descriptionViewController.eventNameDesc = event.eventDescription;
    descriptionViewController.navigationItem.title = event.eventName;

    [self.navigationController pushViewController:descriptionViewController animated:YES];

}



@end

1 个答案:

答案 0 :(得分:1)

您可以这样做:

NSError *error = nil;
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink
                                                           error:&error];

[detector enumerateMatchesInString:someString
                           options:0
                             range:NSMakeRange(0, someString.length)
                        usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
 {
     if (result.resultType == NSTextCheckingTypeLink)
     {
         NSString *str = [NSString stringWithFormat:@"%@",result.URL];
         NSLOG(%@,str);

     }
 }];

希望它有帮助.....:)