美文网首页OC基础iOS进阶iOS Developer
RELabel : 一个极简的正则表达式匹配和展示框架

RELabel : 一个极简的正则表达式匹配和展示框架

作者: xiaoyouPrince | 来源:发表于2017-06-16 12:07 被阅读60次

    前言

    如今 App 中图文混排、关键字匹配已经成为常态了。

    最常见的如:

    这些功能看着很复杂,实际上他们都属于一类相同的功能,都是在原来的字符串内容中进行对应关键字的匹配,然后将匹配结果替换成需要的样式,对此我们可以将他们封装起来,在项目中统一使用。

    RELabel框架原理介绍

    1.RELabel框架简介

    RELabel : 是一款极简正则表达式匹配框架。

    • 默认匹配@XX#话题#http://xiaoyouPrince.com等关键字
    • 可由用户指定要匹配的关键字,如“用户使用协议”
    • 自带匹配结果点击监听,可对匹配结果添加对应事件

    效果如图:

    RELabel.png

    框架地址 : RELabel : https://github.com/xiaoyouPrince/RELabel

    使用方法:请参考 github 上介绍。

    2.匹配原理介绍

    RELabel 中字符串的匹配采用的是正则表达式。

    正则表达式简单入门和使用

    正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等.

    • 正则表达式的使用
    
    /**
    使用正则表达式的步骤:
    1.创建一个正则表达式对象:定义规则
    2.利用正则表达式对象 来测试 相应的字符串
    */
    
        NSString *username = @"6gjkhdjkhgkjh7";
        //        NSString *pattern = @"^\\d{3}";
        //        NSString *pattern = @"\\d{3}$";
        // 1.创建正则表达式
        NSString *pattern = @"^\\d.*\\d$";
        NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
        
        // 2.测试字符串
        NSArray *results = [regex matchesInString:username options:0 range:NSMakeRange(0, username.length)];
        
        NSLog(@"%zd", results.count);
    
    • 一些符号的简单规则
    // Pattern : 样式\规则
    //        NSString *pattern = @"ab7";
    // [] : 找到内部的某一个字符即可
    //        NSString *pattern = @"[0123456789]";
    //        NSString *pattern = @"[0-9]";
    //        NSString *pattern = @"[a-zA-Z0-9]";
    //        NSString *pattern = @"[0-9][0-9]";
    //        NSString *pattern = @"\\d\\d\\d";
    //        NSString *pattern = @"\\d{2,4}";
     
    // ? + *
    // ? : 0个或者1个
    // + : 至少1个
    // * : 0个或者多个
    
    // ^ $ {}
    // ^ : 表示开头
    // $ : 结尾
    // {} : 数量范围
    // \d : 表示数字
    
    
    • 常见匹配
    - (BOOL)match:(NSString *)pattern
    {
        // 1.创建正则表达式
        NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
        // 2.测试字符串
        NSArray *results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)];
        
        return results.count > 0;
    }
    
    - (BOOL)isQQ
    {
        // 1.不能以0开头
        // 2.全部是数字
        // 3.5-11位
        return [self match:@"^[1-9]\\d{4,10}$"];
    }
    
    - (BOOL)isPhoneNumber
    {
        // 1.全部是数字
        // 2.11位
        // 3.以13\15\18\17开头
        return [self match:@"^1[3578]\\d{9}$"];
        // JavaScript的正则表达式:\^1[3578]\\d{9}$\
        
    }
    
    - (BOOL)isIPAddress
    {
        // 1-3个数字: 0-255
        // 1-3个数字.1-3个数字.1-3个数字.1-3个数字
        return [self match:@"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"];
    }
    

    相关文章

      网友评论

        本文标题:RELabel : 一个极简的正则表达式匹配和展示框架

        本文链接:https://www.haomeiwen.com/subject/gnnpqxtx.html