• 正则表达式匹配搜索字符串


    1.正则介绍:

    特殊符号’^'和’$'。他们的作用是分别指出一个字符串的开始和结束。eg:

    “^one”:表示所有以”one”开始的字符串(”one cat”,”one123″,·····);

    类似于:- (BOOL)hasPrefix:(NSString *)aString;

    “a dog$”:表示所以以”a dog”结尾的字符串(”it is a dog”,·····);

    类似于:- (BOOL)hasSuffix:(NSString *)aString;

    “^apple$”:表示开始和结尾都是”apple”的字符串,这个是唯一的~;

    “banana”:表示任何包含”banana”的字符串。

    2.正则和NSString结合使用,返回NSRange参数设置匹配的字体颜色。

    - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;

    NSString *searchText = @"rangeOfString";
    NSRange range = [searchText rangeOfString:@"^[0-9]+$" options:NSRegularExpressionSearch];
    if (range.location != NSNotFound) {
       NSLog(@"range :%@", [searchText substringWithRange:range]);
    }

    3.使用 NSMutableAttributedString设置匹配中的自负为红色。

    NSString *lbX = [NSString  stringWithFormat:@"%@ (%@)",[dict valueForKey:@"FileLeafRef"] ,[dict valueForKey:@"ItemChildCount"]  ];
    NSMutableAttributedString *attributeStr = [[NSMutableAttributedString alloc] initWithString:lbX];
    [attributeStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:matchDocModel.fileNameRange];
    cell.textLabel.attributedText = attributeStr;

    4.在 UISerachBar的代理方法中开辟新线程去做匹配操作,匹配完成刷新视图。

    - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
        //开开启多线程匹配数据
        if ((self.resultDatasource!=nil)&&(self.resultDatasource.count!=0)) {
            [self.resultDatasource removeAllObjects];//清空之前的搜索结果
        }
        
        NSLog(@"当前的searchText是%@,搜索的长度是:%lu",searchText,searchText.length);
        
        __weak ATSDocViewController *weakSelf = self;
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(queue, ^{
           
            for (NSDictionary *dic in arrTasks) {
                NSString *fileName = [[dic valueForKey:@"FileLeafRef"] lowercaseString];
                NSRange fileNameRange = [fileName rangeOfString:[searchText lowercaseString] options:NSRegularExpressionSearch];
                NSString *author = [[NSString  stringWithFormat:@"%@ - %@",[dic valueForKey:@"Author"] ,[dic valueForKey:@"Modified"]] lowercaseString];
                NSRange authorRange = [author rangeOfString:[searchText lowercaseString] options:NSRegularExpressionSearch];
                NSRange modifiedRange = [author rangeOfString:[searchText lowercaseString] options:NSRegularExpressionSearch];
                if (!((fileNameRange.location == NSNotFound)&&(authorRange.location == NSNotFound)&&(modifiedRange.location == NSNotFound))) {
                    //如果有一个不是空的就加入数组
                    MatchDocModel *model = [[MatchDocModel alloc] init];
                    model.dic = dic;
                    model.fileNameRange = fileNameRange;
                    model.authorRange = authorRange;
                    model.modifiedRange = modifiedRange;
                    [weakSelf.resultDatasource addObject:model];//添加具体的搜索结果
                }
            }
            
            NSLog(@"匹配结束,匹配的数量是:%lu个",weakSelf.resultDatasource.count);
            //刷新数据
            dispatch_async(dispatch_get_main_queue(), ^{
                [weakSelf.resultTable reloadData];//刷新数据
            });
            
        });
        
    }

    以上代码为个人思路总结,各位不懂的不要照搬抄袭,对你没什么帮助。

  • 相关阅读:
    3
    tensorflowgpu安装
    文字合成语音
    访问tensorflow官网很慢
    cuda9.0对应pytorch版本
    anaconda更换源
    下载cuda速度慢
    anaconda navigiter 打不开
    scp上传文件出错
    DevExpress报表控件——全新的WinUI文档查看器正式发布
  • 原文地址:https://www.cnblogs.com/wobuyayi/p/5647673.html
Copyright © 2020-2023  润新知