1.利用NSPredicate(谓词)匹配 
例如匹配有效邮箱:

1
2
3
4
NSString *email = @“nijino_saki@163.com”; 
NSString *regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
BOOL isValid = [predicate evaluateWithObject:email];

谓词匹配比较灵活,但是需要有谓词的相关知识。

2.利用rangeOfString:option:直接查找

1
2
3
4
5
6
7
NSString *searchText = @"// Do any additional setup after loading the view, typically from a nib."
 
NSRange range = [searchText rangeOfString:@"(?:[^,])*\\." options:NSRegularExpressionSearch]; 
 
if (range.location != NSNotFound) { 
    NSLog(@"%@", [searchText substringWithRange:range]); 
}

options中设定NSRegularExpressionSearch就是表示利用正则表达式匹配,会返回第一个匹配结果的位置。

3.使用正则表达式类

1
2
3
4
5
6
7
NSString *searchText = @"// Do any additional setup after loading the view, typically from a nib.";    
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?:[^,])*\\." options:NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult *result = [regex firstMatchInString:searchText options:0 range:NSMakeRange(0, [searchText length])];
if (result) {
    NSLog(@"%@\n", [searchText substringWithRange:result.range]);
}

使用系统的正则表达式类(NSRegularExpression)会返回匹配的多个结果。

小结: 
第一种匹配需要学习NSPredicate的写法,需要查阅苹果相关技术文档;如果只关心第一个匹配的结果,第二种匹配较为简洁;如果需要匹配多个结果,同时匹配多次,第三种方式效率会更高。

最新文章

  1. HTML 网页特效CSS大全
  2. C++的单例模式与线程安全单例模式(懒汉/饿汉)
  3. 当年只会C# 所以写C++就成这样了!
  4. Fragment 操作原理
  5. 弱引用?强引用?未持有?额滴神啊-- Swift 引用计数指导
  6. Java中的String与常量池[转帖]
  7. Protobuf C/C++实战笔记(1)
  8. YOU邮件
  9. VS关闭Browser Link
  10. android activity中监听View测量完成的4种方式
  11. NIO的初步入门
  12. gdb core 调试多线程
  13. admin 后台
  14. [skill] mmap / fwrite / write linux磁盘读写的分层结构
  15. NFS客户端阻塞睡眠问题与配置调研
  16. 尚硅谷springboot学习19-日志切换
  17. DevOps之零停机部署
  18. mariadb审计日志通过 logstash导入 hive
  19. 如何添加EXEStealth 2.5x 壳
  20. 【转载】Ogre:Beginner Tutorial 1: SceneNode, Entity,和SceneManager 结构

热门文章

  1. commons-pool2-中的一些配置
  2. 关于Set Nocount ON的性能 |c#调用存储过程的返回值总是-1
  3. 什么是空间复杂度(What is actually Space Complexity ?)
  4. <转载>C++的链接错误LNK2005
  5. 深入浅出 消息队列 ActiveMQ
  6. 微博OpenAPI练习之问题记录
  7. StoryBoard 加入一个自定义View
  8. Arcgis for js载入天地图
  9. 用Spring提高java观察者模式灵活性
  10. Python进阶之路---1.4python数据类型-数字