实用知识:正则表达式的方法使用

#import "ViewController.h"
#import "NSString+RegularExpression.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

//    [self test];
    [self test2];
}

- (void)test2
{
    // QQ号校验
    //匹配QQ号码,匹配规则:全部是都是数字,第一个字符非0,长度为(6~11)
    // ^[1-9]\d{5,10}$       // 必须从头匹配到尾
    // ^ 指定正则从最开始就必须匹配
    // $ 指定正则从匹配开始一直检验到结尾
//    NSString *pattern = @"^[1-9]\\d{5,10}$";
//    
//    NSString *qq = @"34567890";
//    NSString *result = [qq firstMatchStringWithPattern:pattern];
//    NSLog(@"%@", result);


    //匹配规则:以0或86或空开头,后面第一个数字为"1",当第二数字为 "3,5,8" 第三个数字为"0-9",当第二数字为"7" 第三个数字为"6或7或8",当第二个数字为"4"时,第三个数字为"5或7",手机号码位数为11位.
    // | 表示 或者关系
    // (0|86)? 1 (([358][0-9]) | (7[678]) | (4[57])) \d{8}
    NSString *pattern = @"^(0|86)?1(([358][0-9])|(7[678])|(4[57]))\\d{8}$";

    NSString *phone = @"013760671969";
    NSString *result = [phone firstMatchStringWithPattern:pattern];
    NSLog(@"%@", result);
}

- (void)test
{
    /*================= 检验某句话当中是否有数字 =================*/
    NSString *content = @"德码西亚ABC6666_6666666";

    // @"正则表达式";  用来做文字查找/匹配
    //    NSString *pattern = @"555";
    //    NSString *pattern = @"[56]";       // [56] 查找5 或者 6
    //    NSString *pattern = @"[0123456789]";
    //    NSString *pattern = @"\\d";         // 使用 \d 来表示整数
    //    NSString *pattern = @"[0-5]";         // 0-5 表示从 0 到 5
    //    NSString *pattern = @"6{10}";       // {10} 表示重复10次
    //    NSString *pattern = @"6{5,10}";       // {5,10} 表示重复5到10次都是匹配的
    //    NSString *pattern = @"德码西亚(66)?";      // ? 类似于Bool, 表示可有可无
    // (66)? 表示66可有可无, 66? 表示最后一个6可有可无  ()表示整体, 优先
    //    NSString *pattern = @"德码西亚6*";      //  * 表示 0 到 多次重复
    NSString *pattern = @"\\w+";        // \w 表示数字/英文/中文/下划线,  + 表示重复1到多次

    // 正则表达式很容易出错, 因此要注意错误处理
    NSError *error;
    // OC中使用正则表达式 : NSRegularExpression
    NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
    if (error) {
        NSLog(@"正则表达式不正确");
    }

    //    // 从content的指定范围字符串查找第一个匹配的内容
    //    NSTextCheckingResult *result = [expression firstMatchInString:content options:0 range:NSMakeRange(0, content.length)];
    //
    //    // NSTextCheckingResult 正则匹配的结果
    //    if (result) {
    //        // NSTextCheckingResult 的range属性中记录了 匹配结果在原字符串中的位置
    //        NSLog(@"查找结果: %@", NSStringFromRange(result.range));
    //    }  else {
    //        NSLog(@"没有查找到相关文本");
    //    }

    NSArray <NSTextCheckingResult *> *resultArray = [expression matchesInString:content options:0 range:NSMakeRange(0, content.length)];
    // 如果匹配不到结果, 仍然能返回数组, 但是元素个数为0
    if (resultArray.count != 0) {
        // 处理匹配结果
        for (NSTextCheckingResult *result in resultArray) {
            // 获取匹配到的结果文字
            NSString *subString = [content substringWithRange:result.range];
            NSLog(@"%@ : %@", subString, NSStringFromRange(result.range));
        }

    } else {
        // 没有匹配结果
        NSLog(@"匹配不到结果");
    }
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值