iOS 正则表达式

1.前言

       正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符以及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑。常见的用处就是匹配字符串的合法性,截取特定的字符串等等


2.常见语法

语法说明表达式实例完整匹配的字符串
一般字符匹配自身kitykity
.匹配任意除换行符以外的字符a.cabc
\转义字符,使后面的一个字符保持原来的意义a.ca.c
[…]字符集,对应的位置可以是字符集的任意字符a[bc]dabd或acd
\d数字:[0-9]a\dca1c、a2c、a3c…
\D非数字:[^\d]a\Dcabc
\s空白字符a\sca c
\S非空白字符a\Scaac
\w单词字符:[A-Za-z0-9_ ]a\wca_c
\W非单词字符:[^\w]a\Wca c
\b匹配\w和\W之间a\b!bca!bc
\B[^\b]a\Bbcabc
\A仅匹配字符串开头\Aabab
\Z仅匹配字符串结尾ab\Zab
^匹配字符串开头,在多行模式中匹配每一行的开头^abab
$匹配字符串结尾,在多行模式中匹配每一行的结尾ab$ab
*匹配前一个字符0次或无限次abc*ab或abc或abcc…
+匹配前一个字符1次或无限次abc+abc或abcc或abcc…
?匹配前一个字符串0次或1次abc?ab或abc
{m}匹配前一个字符m次ab{3}cabbbc
{m,n}匹配前一个字符m至b次,m和n可以省略:省略m,匹配0至n次;若省略n,则匹配m至无限次ab{1,2}cabc或abbc
|任意匹配该符号左右两侧的表达式kity|peikity或pei

3.使用方法

3.1  谓词创建正则表达式
    // 编写正则表达式:只能是数字或英文,或两者都存在
    NSString *regex = @"^[a-zA-Z0-9]*$";//  或者 @"^\\w*$";
    // 创建谓词对象并设定条件的表达式
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    // 判断的字符串
    NSString *str = @"kitypei100";
    // 对字符串进行判断
    if ([predicate evaluateWithObject:str]) {
        NSLog(@"Match");
    } else {
        NSLog(@"NoMatch");
    }
3.2  NSRegularExpression类创建正则表达式
    NSString *urlStr = @"kity_pei@163.com";
    NSError *error;
    // 创建NSRegularExpression对象并指定正则表达式
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^@]*\\." options:0 error:&error];
    if (!error) { // 如果没有错误
        // 获取特特定字符串的范围
        NSTextCheckingResult *match = [regex firstMatchInString:urlStr options:0 range:NSMakeRange(0, [urlStr length])];
        if (match) {
            // 截获特定的字符串
            NSString *result = [urlStr substringWithRange:match.range];
            NSLog(@"%@",result);
        }
    } else { // 如果有错误,则把错误打印出来
        NSLog(@"error - %@", error);
    }
3.3  NSRegularExpression类抓取多个结果
    NSString *regex = @"\\$\\d*\\*";
    NSString *str = @"$100*$200*$400*";
    NSError *error;
    NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:regex options:NSRegularExpressionCaseInsensitive error:&error];
    // 对str字符串进行匹配
    NSArray *matches = [regular matchesInString:str options:0 range:NSMakeRange(0, str.length)];
    // 遍历匹配后的每一条记录
    for (NSTextCheckingResult *match in matches) {
        NSRange range = [match range];
        NSString *mStr = [str substringWithRange:range];
        NSLog(@"%@", mStr);
    }

4.常用的正则表达式

  • 匹配中文字符
正则表达式:[\u4e00-\u9fa5]
  • 匹配双字节字符(包括汉字在内)
正则表达式:[^\x00-\xff]
  • 匹配空白行
正则表达式:\n\s*\r
  • 匹配Email地址
正则表达式:[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
  • 匹配网址URL
正则表达式:[a-zA-z]+://[^\s]*
  • 匹配国内电话号码
正则表达式:\d{3}-\d{8}|\d{4}-\{7,8}
  • 匹配QQ号码
正则表达式:[1-9][0-9]{4,}
  • 匹配邮政编码
正则表达式:[1-9]\d{5}(?!\d)
  • 匹配18位身份证号
正则表达式:^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$
  • 匹配(年-月-日)格式日期
正则表达式:([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))
  • 匹配正整数
正则表达式:^[1-9]\d*$
  • 匹配负整数
正则表达式:^-[1-9]\d*$
  • 匹配整数
正则表达式:^-?[1-9]\d*$
  • 匹配非负整数(正整数+0)
正则表达式:^[1-9]\d*|0$
  • 匹配非正整数(负整数+0)
正则表达式:^-[1-9]\d*|0$
  • 匹配正浮点数
正则表达式:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
  • 匹配负浮点数
正则表达式:^-[1-9]\d*\.\d*|-0\.\d*[1-9]\d*$

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值