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 ...
随机推荐
- 使用matplotlib的示例:调整字体-设置colormap和colorbar
使用matplotlib的示例:调整字体-设置colormap和colorbar # -*- coding: utf-8 -*- #********************************** ...
- [置顶] iOS中让省略号垂直居中
在显示等待框时,一般要求在提示信息后面加个省略号,但中文输入法下输入的省略号是在底部对齐,但中 文的习惯是省略号垂直居中对齐,最后找到下面这个方法来显示垂直居中的省略号: 中文和英文输入法下一样: o ...
- 各种SSD SMART 信息 转
intel SSD Toolbox SMART信息 解释:03 – Spin Up Time (磁头加载时间)The average time it takes the spindle to spin ...
- 实效云计算用户组(ECUG) 与 阿里云
http://www.ecug.org/ http://www.aliyun.com/ 阿里云
- My安装EclipseJS代码提示(Spket插件)
最近须要大量使用JS来开发,可是MyEclipse2014自带的JS编辑器没有代码提示的功能,开发效率有点低,所以安装了一个Spket的插件,过程很easy,SVN插件的安装比这个更简单. Spket ...
- Spring Boot中使用redis的发布/订阅模式
原文:https://www.cnblogs.com/meetzy/p/7986956.html redis不仅是一个非常强大的非关系型数据库,它同时还拥有消息中间件的pub/sub功能,在sprin ...
- ool _WebTryThreadLock(bool),
一般的问题是这样的 “bool _WebTryThreadLock(bool), 0xxxxxx: Tried to obtain the web lock from a thread other t ...
- python测试开发django-6.模板中include使用
前言 当我们打开一个网站的时候,在打开不同的页面时候,会发现每个页面的顶部.底部内容都差不多,这样就可以把这些公共的部分,单独抽出来. 类似于python里面的函数,把公共部分写成函数,然后调用就行了 ...
- 一款DIY移动电源的性能
文波很大 就这款产品,质量非常一般后面拿品胜的做个对比
- 字符串转换atof atoi atol gcvt strtod strtol strto ul toascii tolower toupper
atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include <stdlib.h> 定义函数 double at ...