IOS中正则表达式的使用

正则表达式在IOS开发中的应用

正则表达式在字符串查找,替换,检测中的应用非常广泛,正则表达式是什么,有怎样的语法,我的另一篇博客中有详细的介绍:http://my.oschina.net/u/2340880/blog/403508。这里只简单说一下其概念 ,正则表达式是一种语法小巧简单的语言,用来约束一些过滤字符串条的条件。很多开发工具都有支持正则表达式的内容,IOS也不例外,在IOS中NSRegularExpression类就是一个专门来处理正则表达式的类。

一、初始化方法

初始化NSRegularExpression的方法有两种,一个init方法和一个类方法。其作用基本是一样的

+ (NSRegularExpression *)regularExpressionWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error;

- (instancetype)initWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error 

其中,pattern是正则表达式,options是参数。对于option参数,它是一个枚举,表示正则模式的设置,如下:

?


1

2

3

4

5

6

7

8

9

typedef NS_OPTIONS(NSUInteger, NSRegularExpressionOptions) {

   NSRegularExpressionCaseInsensitive             = 1 << 0, //不区分字母大小写的模式

   NSRegularExpressionAllowCommentsAndWhitespace  = 1 << 1, //忽略掉正则表达式中的空格和#号之后的字符

   NSRegularExpressionIgnoreMetacharacters        = 1 << 2, //将正则表达式整体作为字符串处理

   NSRegularExpressionDotMatchesLineSeparators    = 1 << 3, //允许.匹配任何字符,包括换行符  

   NSRegularExpressionAnchorsMatchLines           = 1 << 4, //允许^和$符号匹配行的开头和结尾

   NSRegularExpressionUseUnixLineSeparators       = 1 << 5, //设置\n为唯一的行分隔符,否则所有的都有效。

   NSRegularExpressionUseUnicodeWordBoundaries    = 1 << 6 //使用Unicode TR#29标准作为词的边界,否则所有传统正则表达式的词边界都有效

};

注意:1、NSRegularExpressionCaseInsensitive模式下正则表达式 aBc 会匹配到abc.

            2、NSRegularExpressionIgnoreMetacharacters模式下正则表达式a b c 会匹配到abc,正则表达式ab#c会匹配到ab。

            3、NSRegularExpressionAllowCommentsAndWhitespace模式下正则表达式[a-z],会匹配到[a-z]。

二、获取查询结果

初始化完毕正则表达式的处理类后,我们需要进行正则表达式的查询,IOS官方提供了两种模式:

1、带block模式的方法:

- (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (^)(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop))block;

使用举例:

?


1

2

3

4

NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern:@"[a-z]" options:NSRegularExpressionCaseInsensitive error:nil];

    [regex enumerateMatchesInString:@"124a" options:NSMatchingReportProgress range:NSMakeRange(0, 4) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {

        NSLog(@"%@",result);

    } ];

注意:1、这个函数的一个参数options是一个枚举,设置回调的方式,如下:

?


1

2

3

4

5

6

7

typedef NS_OPTIONS(NSUInteger, NSMatchingOptions) {

   NSMatchingReportProgress         = 1 << 0, //找到最长的匹配字符串后调用block回调

   NSMatchingReportCompletion       = 1 << 1, //找到任何一个匹配串后都回调一次block

   NSMatchingAnchored               = 1 << 2, //从匹配范围的开始出进行极限匹配

   NSMatchingWithTransparentBounds  = 1 << 3, //允许匹配的范围超出设置的范围

   NSMatchingWithoutAnchoringBounds = 1 << 4  //禁止^和$自动匹配行还是和结束

};

            2、block回调中的flags枚举对应如下:

?


1

2

3

4

5

6

7

typedef NS_OPTIONS(NSUInteger, NSMatchingFlags) {

   NSMatchingProgress               = 1 << 0, //匹配到最长串是被设置     

   NSMatchingCompleted              = 1 << 1, //全部分配完成后被设置    

   NSMatchingHitEnd                 = 1 << 2, //匹配到设置范围的末尾时被设置   

   NSMatchingRequiredEnd            = 1 << 3, //当前匹配到的字符串在匹配范围的末尾时被设置     

   NSMatchingInternalError          = 1 << 4  //由于错误导致的匹配失败时被设置   

};

            3、还有一点需要注意,就是那个bool值stop,我们可以在block块中设置它为YES,之后便会停止查找。

2、非block的方法

这个方法会返回一个结果数组,将所有匹配的结果返回

- (NSArray *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

这个方法会返回匹配到得字符串的个数

- (NSUInteger)numberOfMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

这个方法会返回第一个查询到得结果,这个NSTextCheckingResult对象中有一个range属性,可以得到匹配到的字符串的范围。

- (NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

这个方法直接返回匹配到得范围,NSRange。

- (NSRange)rangeOfFirstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

三、一个辅助方法

在NSRegularExpression类中还提供了一个辅助方法:

+ (NSString *)escapedPatternForString:(NSString *)string;

它可以帮助我们将正则表达式加上"\"进行保护,将元字符转化成字面值。

到此,在IOS中正则表达式的基本用法就介绍完了,希望正则表达式的应用,能为你的项目节省更多时间。

时间: 2024-10-28 02:37:01

IOS中正则表达式的使用的相关文章

iOS 中正则表达式使用方法汇总

iOS 中正则表达式使用方法汇总 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 某种语言中的正则工具算是木桶,而这个工具处理的是正则表达式,算是水,那么水很多,无论是淡水还是咸水,或是雨水,至

正则表达式在IOS中的应用及IOS中三种正则表达式的使用与比较_正则表达式

正则表达式在ios中应用 一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式达到字符串的复杂控制. 二.正则表达式的语法 看一个过滤纯数字的例子 - (BOOL)validateNumber:(NSString *) textString { NSString* number=@"^[0-9]+$"; NSPredicate *numbe

iOS中常用的正则表达式

正则表达式是什么鬼呀?(大神请绕路哦) 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?.如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc.在这里,*会被解释成任意的字符串.和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求--当然,

iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容_正则表达式

何谓正则表达式 正则表达式(regular expression),在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数有regexps.regexes.regexen. 正则表达式组成 正则表达式有两种类型的字符

iOS 中使用正则表达式判断身份证格式及银行卡号格式是否正确(推荐)_正则表达式

1.有时候我们会用到上传身份证号,或者银行卡号,这个时候就需要我们对身份证号以及银行卡号,进行基本的判断. 下面便是身份证号的判断返回YES是合法,反之不合法 #pragma mark 判断身份证号是否合法 - (BOOL)judgeIdentityStringValid:(NSString *)identityString { if (identityString.length != 18) return NO; // 正则表达式判断基本 身份证号是否满足格式 NSString *regex2

iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容

何谓正则表达式 正则表达式(regular expression),在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数有regexps.regexes.regexen. 正则表达式组成 正则表达式有两种类型的字符

IOS中用正则表达式判断输入的内容为8-16位且同时包含数字和字母

今天在项目中需要用到判断用户输入的用户名长度为8-16位且同时包含数字和字母,在网上搜了一下正则表达式的用法,然后参考这篇blog,完美解答了问题.记录一下: 密码有如下要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间. 如何分析需求?拆分!这就是软件设计的一般思路了.于是乎,拆分需求如下: 1,不能全部是数字 2,不能全部是字母 3,必须是数字或字母 只要能同时满足上面3个要求就可以了,写出来如下: 1 ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-

iOS - Regex 正则表达式

1.Regex 定义 正则表达式又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为 regex.regexp 或 RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本; 使用步骤 1.定义正则表达式规则 2.通过规则,创建正则表达式对象 3.利用正则表达式对象匹配字符串 注意:正则表达式通常缩写成 "regex" 2.语法介绍 正则

ios-需要在IOS中设置延迟功能

问题描述 需要在IOS中设置延迟功能 需要一个延时器,进行23秒的延迟然后执行函数.应该怎么实现?用不用NSTimer? 解决方案 performSelector: withObject: afterDelay: 解决方案二: 简单点的话,使用performSelector: withObject: afterDelay: 方法 [self performSelector:@selector(delayMethod:) withObject:nil afterDelay:23];