iOS正則表達式(一)

什么是正則表達式?

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

作用?

在iOS开发中我们通常使用正則表達式来匹配给定的字符串是否符合我们的业务逻辑,比方说用户注冊帐号仅仅能是手机号或者邮箱等。我们还能够使用正則表達式来从一段字符串其中截取我们须要的字符串,比方说网页源代码中我们须要截取某些个图片地址等。总得来说。在iOS开发中正則表達式的作用有两点:
    1. 检測给定的字符串是否符合业务逻辑
    2. 从目标字符串中获取我们想要的特定字符串

怎样在OC中使用正則表達式?

1.利用NSPredicate(谓词)匹配
 NSString * targetString = @"13534341234";
 NSString * [email protected]"^[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 * [email protected]"^[1][3578]+\\d{9}"
NSString *pattern = @"<img src=(.*?)>";

对,这就是我们的正則表達式。那么正則表達式的语法又是怎样的呢?且听下回分解!



我的优酷空间,有视频教程哦,欢迎点击。

时间: 2024-10-14 04:07:57

iOS正則表達式(一)的相关文章

ios 正則表達式替换

1. 不可变字符串   (content 是不可变) NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern: @"<(/{0,})div(.{0,})>" options:0 error:nil]; content  = [regularExpression stringByReplacingMatchesInString:content opti

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

经常使用正則表達式大全!(比如:匹配中文.匹配html) 匹配中文字符的正則表達式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包含汉字在内):[^x00-xff] 评注:能够用来计算字符串的长度(一个双字节字符长度计2.ASCII字符计1) 匹配空白行的正則表達式:ns*r 评注:能够用来删除空白行 匹配HTML标记的正則表達式:<(S*? )[^>]*>.*?|<.*? /> 评注:网上流传的版本号太糟糕,上面这个

javascript中的正則表達式

对文本数据进行操作是JavaScript中常见的任务.正則表達式通过同意程序猿指定字符串匹配的模式来简化诸如验证表单中输入是否具有正确格式之类的任务. 1.正則表達式标记: 字符 含义 举例 i 大写和小写不敏感 对于模式/http/i  "http" 和"HttP" 一样能够匹配 g 全局匹配.找出所有匹配字符串,而不不过找到第一个就返回. 经常使用于替换 m 多行匹配 2.正則表達式位置指示符:规定模式在它所匹配的字符串里的位置. 字符 含义 举例 ^ 开头 对

经验之谈—正則表達式实现图文混排

在项目中,我们常常须要发表情,以及常常须要将表情字符转换成表情.由于表情是一个图片.所以我们发给server的时候,实际上是发一段特殊的文字给server,然后转换成表情.以免浪费用户过多的流量. 那接下来.我们就来介绍一下,怎样使用正則表達式实现图文混排呢? 为了以后的代码的管理方便,我们抽取出两个类: NSString+Regular.h中.我们暴露两个方法出来: /** * 返回正則表達式匹配的第一个结果 * * @param pattern 正則表達式 * * @return 匹配的第一

JAVA学习第六十五课 — 正則表達式

正則表達式:主要应用于操作字符串.通过一些特定的符号来体现 举例: QQ号的校验 6~9位.0不得开头.必须是数字 String类中有matches方法 matches(String regex) 告知此字符串是否匹配给定的正則表達式. regex,就是给定的正則表達式 public static void checkQQ() { //第一位是数字1-9,第二位以后是0-9,除去第一位数剩下数字位数范围是5到8位 String regex = "[1-9][0-9]{5,8}";//正

HDU-1039-Easier Done Than Said?(Java &amp;amp;&amp;amp; 没用正則表達式是我的遗憾.....)

Easier Done Than Said? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9845    Accepted Submission(s): 4784 Problem Description Password security is a tricky thing. Users prefer simple password

正則表達式

一.概述 正則表達式是一种能够用于模式匹配和替换的强有力的工具.其作用例如以下: (1)測试字符串的某个模式.比如,能够对一个输入字符串进行測试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证. (2)替换文本.能够在文档中使用一个正則表達式来标识特定文字,然后能够所有将其删除,或者替换为别的文字: (3)依据模式匹配从字符串中提取一个子字符串. 能够用来在文本或输入字段中查找特定文字. 二.匹配字符 字符 解释说明 \ 将下一字符标记为特殊字符.文本.反向引用或

js正則表達式语法

1. 正則表達式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之同样的一个字符. 举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配结果是:成功:匹配到的内容是:"c":匹配到的位置是:開始于2,结束于3.(注:下标从0開始还是从1開始,因当前编程语言的不同而可能不同) 举例2:表达式 "bcd&

Java正則表達式入门

众所周知,在程序开发中,难免会遇到须要匹配.查找.替换.推断字符串的情况发生,而这些情况有时又比較复杂,假设用纯编码方式解决,往往会浪费程序猿的时间及精力.因此,学习及使用正則表達式,便成了解决这一矛盾的主要手段. 大 家都知道,正則表達式是一种能够用于模式匹配和替换的规范,一个正則表達式就是由普通的字符(比如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描写叙述在查找文字主体时待匹配的一个或多个字符串.正則表達式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.  自从jdk1