什么是正則表達式?

正則表達式是对字符串操作的一种逻辑公式。

作用?

在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正則表達式(一)的更多相关文章

  1. ios 正則表達式替换

    1. 不可变字符串   (content 是不可变) NSRegularExpression *regularExpression = [NSRegularExpression regularExpr ...

  2. iOS_正則表達式

    iOS 正則表達式 正則表達式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE).计算机科学的一个概念. 正則表達式使用单个字符 ...

  3. 深入浅出理解iOS经常使用的正則表達式—基础篇[Foundation]

    參考资料:cocoachina的zys475481075的文章 几个单词 Regular ['regjʊlə]adj. 定期的:有规律的 Expression[ɪk'spreʃ(ə)n; ek-] n ...

  4. [iOS]经常使用正則表達式

    经常使用正則表達式大全!(比如:匹配中文.匹配html) 匹配中文字符的正則表達式: [u4e00-u9fa5]    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包含汉字 ...

  5. 【iOS】正則表達式抓取网页数据制作小词典

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xn4545945/article/details/37684127 应用程序不一定要自己去提供数据. ...

  6. 黑马程序猿————Java基础日常笔记---反射与正則表達式

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...

  7. js正則表達式语法

    1. 正則表達式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之同样的 ...

  8. Java正則表達式入门

     众所周知,在程序开发中,难免会遇到须要匹配.查找.替换.推断字符串的情况发生,而这些情况有时又比較复杂,假设用纯编码方式解决,往往会浪费程序猿的时间及精力.因此,学习及使用正則表達式,便成了解决这一 ...

  9. jquery+正則表達式验证邮箱格式的样例

    js: $("#email").blur(function(){ //获取id相应的元素的值,去掉其左右的空格 var email = $.trim($('#email').val ...

随机推荐

  1. Bandwagon Host – 64M内存 1.5G硬盘 100G流量 年3.99美金

    BandwagonHost(习惯称作搬瓦工),属于IT7公司旗下的产品,搬瓦工虽然是新起的商家, 但是有实力雄厚的公司背景在一定程度上还是可以放心使用的. 很多用户在选择这款低价VPS的时候都担心是否 ...

  2. 模拟登陆CSDN——就是这么简单

    工具介绍 本篇文章主要是解说怎样模拟登陆CSDN.使用的工具是HttpClient+Jsoup 当中HttpClient主要是负责发送请求,而Jsoup主要是解析HTML 你可能对HttpClient ...

  3. 无法打开文件“atlsd.lib”

    问题: vs2013编译c++代码,错误 15 error LNK1104: 无法打开文件“atlsd.lib” 解决: 在你电脑或者其他人电脑上搜索atlsd.lib,将其拷贝到D:\Program ...

  4. [原] corePlot 类库与iOS自带类库使用方法对比(很多开源代码都有这个特点)

    ——人类最倚重的是自己的“以往经验”.—— 我们直接看一下在corePlot 类库和iOS自带类中为一个控件设置文本显示格式的实现.   * corePlot 类库中,为一个对象设置标题显示格式 , ...

  5. 汇编语言的Hello World

      汇编语言的Hello World,汇编语言没有我想象的那么低级,它已经具备了不少高级语言的特性,代码也变得清晰,层次清楚,易于维护了. a.asm .386 .model flat,stdcall ...

  6. 使用开源库 TWMessageBarManager 展示系统级别的通知

    TWMessageBarManager 简单翻译 https://github.com/terryworona/TWMessageBarManager An iOS manager for prese ...

  7. java通过System.getProperty获取系统属性

    getProperties public static Properties getProperties() 确定当前的系统属性. 首先,如果有安全管理器,则不带参数直接调用其 checkProper ...

  8. JTable常见用法细则

    JTable是Swing编程中很常用的控件,这里总结了一些常用方法以备查阅.欢迎补充,转载请注明作者与出处. 一.创建表格控件的各种方式:1)  调用无参构造函数. JTable table = ne ...

  9. 【TYVJ 五月图论专项有奖比赛】

    最短路+TSP+最小生成树+倍增LCA+TreeDP 第一题 其实是个TSP问题(然而我没发现),但是关键点很少,只有5个,所以用dij+heap分别预处理出来这五个点为源的最短路…… 然后枚举起点 ...

  10. 【BZOJ】【2752】【HAOI2012】高速公路(Road)

    数学期望/线段树 然而又是一道road= =上一道是2750…… 下次不要一看期望题就弃疗么…… 期望题≠不可做题……!! 其实在这题中,期望就是(所有情况下 权值之和)/(总方案数) 因为是等概率抽 ...