iOS中3种正则表达式的使用与比较-备
2024-10-16 07:24:49
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的写法,需要查阅苹果相关技术文档;如果只关心第一个匹配的结果,第二种匹配较为简洁;如果需要匹配多个结果,同时匹配多次,第三种方式效率会更高。
最新文章
- HTML 网页特效CSS大全
- C++的单例模式与线程安全单例模式(懒汉/饿汉)
- 当年只会C# 所以写C++就成这样了!
- Fragment 操作原理
- 弱引用?强引用?未持有?额滴神啊-- Swift 引用计数指导
- Java中的String与常量池[转帖]
- Protobuf C/C++实战笔记(1)
- YOU邮件
- VS关闭Browser Link
- android activity中监听View测量完成的4种方式
- NIO的初步入门
- gdb core 调试多线程
- admin 后台
- [skill] mmap / fwrite / write linux磁盘读写的分层结构
- NFS客户端阻塞睡眠问题与配置调研
- 尚硅谷springboot学习19-日志切换
- DevOps之零停机部署
- mariadb审计日志通过 logstash导入 hive
- 如何添加EXEStealth 2.5x 壳
- 【转载】Ogre:Beginner Tutorial 1: SceneNode, Entity,和SceneManager 结构
热门文章
- commons-pool2-中的一些配置
- 关于Set Nocount ON的性能 |c#调用存储过程的返回值总是-1
- 什么是空间复杂度(What is actually Space Complexity ?)
- <;转载>;C++的链接错误LNK2005
- 深入浅出 消息队列 ActiveMQ
- 微博OpenAPI练习之问题记录
- StoryBoard 加入一个自定义View
- Arcgis for js载入天地图
- 用Spring提高java观察者模式灵活性
- Python进阶之路---1.4python数据类型-数字