ios-正则表达式的使用

一般来说我们在ios中使用正则表达式一共有这几个步骤1、创建一个正则表达式对象来定义规则 2、利用正则表达式对象来测试相应的字符串。

我们之前匹配字符串可能是这么匹配的,通过for循环取出字符串,然后再进行一一匹配

 NSString * str = @"nsjkan1234980";
    
    BOOL flag = YES;
    for(int i=0;i<str.length;i++)
    {
        unichar c = [str characterAtIndex:i];
        if(!(c>='0'&&c<='9'))
        {
            flag=NO;
            break;
        }
    }
    if(flag)
    {
        NSLog(@"字符串全是数字");
    }
    else
    {
        NSLog(@"字符串包含了非数字");
    }

在Xcode中我们可以这样使用NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:nil];其中的

options表示的是NSRegularExpressionOptions,这是个枚举,有以下这么几个值

        NSRegularExpressionCaseInsensitive             = 1 << 0, //不区分字母大小写的模式
        NSRegularExpressionAllowCommentsAndWhitespace  = 1 << 1, //忽略掉正则表达式中的空格和#号之后的字符
        NSRegularExpressionIgnoreMetacharacters        = 1 << 2, //将正则表达式整体作为字符串处理
        NSRegularExpressionDotMatchesLineSeparators    = 1 << 3, //允许.匹配任何字符,包括换行符
        NSRegularExpressionAnchorsMatchLines           = 1 << 4, //允许^和$符号匹配行的开头和结尾
        NSRegularExpressionUseUnixLineSeparators       = 1 << 5, //设置\n为唯一的行分隔符,否则所有的都有效。
        NSRegularExpressionUseUnicodeWordBoundaries    = 1 << 6 //使用Unicode TR#29标准作为词的边界,否则所有传统正则表达式的词边界都有效

比如说我们可以这么做,下面是去匹配str字符串中的数字的个数,其中的pattern就是一个规则,[0-9]就是去查找有没有数字,当然前面的那个写法和[0123456789]这种写法是一样的,因为[ ]代表的就是去查找这个括号里面的字符

        NSString * str = @"AAABBB";
        NSString * pattern = @"[0-9]";
        NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:nil];
        
        NSArray * results = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)];
        
        NSLog(@"%d",results.count);

如果是普通的字符串比如说,下面是AB就是去匹配这个字符串中有没有AB字符。

NSString * pattern = @"AB";

下面这个是去找字符串中所有小写字母的个数

NSString * pattern = @"[a-z]";
如果想去找小写字母和大写字母都可以有的话,就用下面的。

NSString * pattern = @"[a-zA-Z]";
NSString * pattern = @"[a-z|A-Z]";
如果想去找两个连在一起的数字的话,可以用下面的方法

NSString * pattern = @"[0-9][0-9]";
当然我们还可以这么写,数字可以用\d来代替的,当然这里因为\是转义字符,所以我们还需要再加一个\进行转换为普通的\

NSString * pattern = @"\\d\\d";
当然想找两个数字组成的字符串,我们还可以这么做

NSString * pattern = @"\\d{2}";
如果是下面这个就是去找两个数字后面还带有两个A的子串

NSString * pattern = @"\\d{2}A{2}";
这个是表示数字个数是2-4个的,这里需要注意的是,如果我们字符串是7789,匹配出来的是1个不是2个,因为它是能匹配多少就匹配多少个的。

NSString * pattern = @"\\d{2-4}";
下面这个是匹配字符串中包含数字的个数为0个或者一个,下面这个匹配把空串也包含进去了

NSString * pattern = @"\\d?";
下面这个带+号的就表示匹配至少包含一个数字的字符串,这里有两个,一个是11212,一个是123

NSString * str = @"a11212abc123";
NSString * pattern = @"\\d+";
下面这个表示的是以数字开头的字符串

NSString * pattern = @"^\\d";
下面这个是是否以两个数字开头

NSString * pattern = @"^\\d{2}";
下面这个是有任意个1的字符串,*表示任意个

NSString * pattern = @"1*";
下面这个判断是否以数字开头,是否以数字结尾 . 表示的是任意的字符换行符除外 ^表示的是以什么开头,$表示的是以什么结尾

NSString * pattern = @"^\\.*\\d$";

判断是否是纯数字,并且开头不是0,数字是6-11位

NSString * str = @"1121212312123";
NSString * pattern = @"^[1-9]\\{5,11}$";
“+”可以用{1,}表示,“?”可以用{0,1}表示,其实也就是说如果是n+表示的就是要至少包含一个n字符,如果是*就表示包含0个或多个的字符n,如果是n?

就表示的是匹配包含0个或者1个n的字符串。| 表示的就是或的意思。 正则表达式可以去判断字符串是否符合某个特定的规则

可以去截取字符串中符合某个特定规则的内容,在这里补充下()的作用就是分组的意思,()内的内容表示的是一个字符串,()本身不匹配任何东西,也不限制匹配任何东西,只是把括号内的内容作为同一个表达式来处理,例如(ab){1,3},就表示ab一起连续出现最少1次,最多3次。如果没有括号的话,ab{1,3},就表示a,之后紧跟的b出现最少1次,最多3次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值