iOS正則表達式(一)
什么是正則表達式?
正則表達式是对字符串操作的一种逻辑公式。
作用?
在iOS开发中我们通常使用正則表達式来匹配给定的字符串是否符合我们的业务逻辑,比方说用户注冊帐号仅仅能是手机号或者邮箱等。我们还能够使用正則表達式来从一段字符串其中截取我们须要的字符串,比方说网页源代码中我们须要截取某些个图片地址等。总得来说。在iOS开发中正則表達式的作用有两点:
1. 检測给定的字符串是否符合业务逻辑
2. 从目标字符串中获取我们想要的特定字符串
怎样在OC中使用正則表達式?
1.利用NSPredicate(谓词)匹配
NSString * targetString = @"13534341234";
NSString * regularExpression=@"^[1][3578]+\\d{9}";
NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regularExpression];
BOOL flag = [pre evaluateWithObject:targetString];
if (flag) {
NSLog(@"是手机号码");
}else{
NSLog(@"不是手机号码");
}
如上代码所看到的为简单的正則表達式在iOS中的使用方式,意思为:用户输入的字符串是否为手机号码。
其中 `targetString` 为用书输入字符串,`regularExpression` 为正則表達式语法,`NSPredicate`为OC中查询过滤类
2.利用rangeOfString:option:直接查找目标字符串
NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.hao123.com"] encoding:4 error:nil];
NSRange range = [string rangeOfString:@"(<img.*?/>)" options:NSRegularExpressionSearch];
NSString *subStr = [string substringWithRange:range];
NSLog(@"subStr = %@",subStr);
如上代码就是从网页中过滤出我们的图片标签。删除结果为:`<img class="img-hook" src="http://s0.hao123img.com/res/img/logo/logonew1.png" width="210" height="60" />`
3.使用正則表達式类
NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.hao123.com"] encoding:4 error:nil];
NSString *pattern = @"<img src=(.*?)>";
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators error:nil];
NSTextCheckingResult *checkResult = [regex firstMatchInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, string.length)];
NSString *result = [string substringWithRange:[checkResult rangeAtIndex:0]];
NSLog(@"result = %@",result);
此代码和上面代码一样是找到网址中一个图片标签,那么要讲网址中全部的图片标签都找到,怎样写?
NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.hao123.com"] encoding:4 error:nil];
NSString *pattern = @"<img src=(.*?)>";
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators error:nil];
NSArray *theArray = [regex matchesInString:string options:NSMatchingReportProgress range:NSMakeRange(0, string.length)];
for ( NSTextCheckingResult *ele in theArray) {
NSString *theLastString = [string substringWithRange:[ele rangeAtIndex:0]];
NSLog(@"theLastString = %@",theLastString);
}
那么问题来了。上面写的例如以下字符串是个什么鬼?
NSString * regularExpression=@"^[1][3578]+\\d{9}"
NSString *pattern = @"<img src=(.*?)>";
对,这就是我们的正則表達式。那么正則表達式的语法又是怎样的呢?且听下回分解!
iOS正則表達式(一)的更多相关文章
- ios 正則表達式替换
1. 不可变字符串 (content 是不可变) NSRegularExpression *regularExpression = [NSRegularExpression regularExpr ...
- iOS_正則表達式
iOS 正則表達式 正則表達式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE).计算机科学的一个概念. 正則表達式使用单个字符 ...
- 深入浅出理解iOS经常使用的正則表達式—基础篇[Foundation]
參考资料:cocoachina的zys475481075的文章 几个单词 Regular ['regjʊlə]adj. 定期的:有规律的 Expression[ɪk'spreʃ(ə)n; ek-] n ...
- [iOS]经常使用正則表達式
经常使用正則表達式大全!(比如:匹配中文.匹配html) 匹配中文字符的正則表達式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包含汉字 ...
- 【iOS】正則表達式抓取网页数据制作小词典
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xn4545945/article/details/37684127 应用程序不一定要自己去提供数据. ...
- 黑马程序猿————Java基础日常笔记---反射与正則表達式
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...
- js正則表達式语法
1. 正則表達式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之同样的 ...
- Java正則表達式入门
众所周知,在程序开发中,难免会遇到须要匹配.查找.替换.推断字符串的情况发生,而这些情况有时又比較复杂,假设用纯编码方式解决,往往会浪费程序猿的时间及精力.因此,学习及使用正則表達式,便成了解决这一 ...
- jquery+正則表達式验证邮箱格式的样例
js: $("#email").blur(function(){ //获取id相应的元素的值,去掉其左右的空格 var email = $.trim($('#email').val ...
随机推荐
- iOS上使用自己定义ttf字体
项目中想使用第三方的字体,在stackoverflow上查询解决的方法,也折腾一会,加入成功,示比例如以下: 1.将xx.ttf字体库增加project里面 2.在project的xx-Info.pl ...
- UVALive 3135--Argus+自己定义优先队列的优先规则
题目链接:id=18684">点击进入 仅仅是题意比較难懂,读懂题后全然能够用优先队列水过去.这次学会自己定义优先队列的优先规则,事实上就是在结构体中重载一下<运算符. 代码例如 ...
- 使用Bootstrap 3开发响应式网站实践02,轮播
本篇体验图片轮播.html部分为: <div class="carousel slide" id="myCarousel" > <!--Ind ...
- datagrid在MVC中的运用07-实现Master-Detail(使用PartialView)
本文主要体验用jQuery Easyui的datagrid来实现Master-Detail主次表.谢谢Kevin的博文,助我打开了思路. 主表显示所有的Category,当点击主表的展开按钮,显示该C ...
- Java遍历Map键、值。获取Map大小的方法
Map读取键值对,Java遍历Map的两种实现方法 第一种方法是根据map的keyset()方法来获取key的set集合,然后遍历map取得value的值 import java.util.HashM ...
- tomcat配置manager
tomcat-users.xml配置 <role rolename="manager-gui"/><user username="tomcat" ...
- SVN中的Trunk、Tag、Brance的用法
在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆.在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别.至于何时用tag, ...
- 【BZOJ】【1006】【HNOI2008】神奇的国度
弦图最小染色/MCS算法 Orz PoPoQQQ (UPD:ydc的写法好像更熟悉一些……(类似堆优化的Dij啊~ 先留个坑……明天再看一看……感觉好神奇>_<(完美消除序列之于弦图 就 ...
- Java网络编程技术2
3. UDP数据报通信 UDP通信中,需要建立一个DatagramSocket,与Socket不同,它不存在“连接”的概念,取而代之的是一个数据报包——DatagramPacket.这个数据报包必须知 ...
- @JVM垃圾回收调优方法
JVM调优工具 Jconsole,jProfile,VisualVM Jconsole:jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪. JProfiler: ...