iOS中正则的使用方法

一、基本语法

8043006-7bf983cfe962c3c0.png

二、与js的正则对比

  • 多了 \A 字符串开头, \Z 字符串结尾,
    • 和^$的区别就是,^$有两义性,在多行模式下会匹配行头尾
    • 而\A\Z只匹配整个字符串的头尾,不管何种模式
  • 多了命名分组 (?P<id>), 与分组引用 (?P=name)
  • 多了向左预匹配 (?<=) 与 (?<!)
  • 多了条件分情况匹配 (?(No/name)yes-pattern|no-pattern), 根据前面某个索引或者具名分组是否匹配到来决定接下来启动哪一个匹配项
    • 必须先有前面分组,后面判定组才能引用
    • 引用可以使用索引,也可以使用具名

三、注意事项

  1. “.”字符集不包含换行,某些场景必须使用 [\s\S] 这样的全集代替
  2. 在iOS中,正则以字符串的形式存储,转义符必须为双斜扛
  3. 在线测试环境,regexp

四、iOS中的使用方式

1、使用字符串的子串查找方法


        NSString *re =  @"\\d+";
        NSString *testStr = @"my number is 13662680007";
        
        NSRange range = [testStr rangeOfString:re options:NSRegularExpressionSearch];
        
        if(range.location != NSNotFound){
            NSString *ret = [testStr substringWithRange:range];
            NSLog(@"%@", ret);
            
        }else{
            NSLog(@"not find");
        }

2、使用谓词模糊查询方法

+ (BOOL)checkTelNumber:(NSString *) telNumber

{

    NSString *pattern = @"^1+[3578]+\\d{9}";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];

    BOOL isMatch = [pred evaluateWithObject:telNumber];

    if (telNumber.length != 11) {

        return NO;

    }

    return isMatch;

}

3、使用正则表达式对象匹配方法

// 手机号码匹配
NSString *pattern = @"1[3578]\\d{9}$";

NSError *error = nil;
/*
typedef NS_OPTIONS(NSUInteger, 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标准作为词的边界,否则所有传统正则表达式的词边界都有效
};
*/
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];

NSArray<NSTextCheckingResult *> *result = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)];
  if (result) {
    for (int i = 0; i<result.count; i++) {
        NSTextCheckingResult *res = result[i];
        NSLog(@"str == %@", [str substringWithRange:res.range]);
     }
  }else{
      NSLog(@"error == %@",error.description);
  }
}

四、常用正则表达式

(1)验证电话号码:(”^(\d{3,4}-)\d{7,8}$”)

(2)验证Email地址:(“^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$”);

(3)整数或者小数:^[0-9]+([.]{0,1}[0-9]+){0,1}$

(4)只能输入数字:”^[0-9]*$”。

(5)只能输入由26个英文字母组成的字符串:”^[A-Za-z]+$”。

(6)验证是否含有%&’,;=?$\”等字符:”[%&',;=?$\x22]+”。

(7)只能输入汉字:”^[\u4e00-\u9fa5]{0,}$”。

(8).验证一年的12个月:”^(0?[1-9]|1[0-2])$”正确格式为:”01″~”09″和”10″~”12″。

(9)验证一个月的31天:”^((0?[1-9])|((1|2)[0-9])|30|31)$”正确格式为;”01″~”09″、”10″~”29″和“30”~“31”。

(10)获取日期正则表达式:\d{4}[年|-|.]\d{\1-\12}[月|-|.]\d{\1-\31}日? 注:可用来匹配大多数年月日信息。

(11)匹配空白行的正则表达式:\n\s*\r 注:可以用来删除空白行

(12)匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 注:表单验证时很实用

(13)匹配腾讯QQ号:[1-9][0-9]{4,} 注:腾讯QQ号从10 000 开始

(14)匹配中国邮政编码:[1-9]\d{5}(?!\d) 注:中国邮政编码为6位数字

(15)匹配ip地址:((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 12,110评论 0 99
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,992评论 0 5
  • 一、正则表达式的用途(搜索和替换) 1.1.正则表达式(regular expression,简称regex)是一...
    IIronMan阅读 13,414评论 0 14
  • 在@Value注解中为String类型的字段设置null值 http://www.cnblogs.com/larr...
    WY_250e阅读 4,308评论 0 0

友情链接更多精彩内容