推荐下载iOS中正则表达式的基本使用方法.docx

上传人:b****6 文档编号:5380221 上传时间:2022-12-15 格式:DOCX 页数:20 大小:19.99KB
下载 相关 举报
推荐下载iOS中正则表达式的基本使用方法.docx_第1页
第1页 / 共20页
推荐下载iOS中正则表达式的基本使用方法.docx_第2页
第2页 / 共20页
推荐下载iOS中正则表达式的基本使用方法.docx_第3页
第3页 / 共20页
推荐下载iOS中正则表达式的基本使用方法.docx_第4页
第4页 / 共20页
推荐下载iOS中正则表达式的基本使用方法.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

推荐下载iOS中正则表达式的基本使用方法.docx

《推荐下载iOS中正则表达式的基本使用方法.docx》由会员分享,可在线阅读,更多相关《推荐下载iOS中正则表达式的基本使用方法.docx(20页珍藏版)》请在冰豆网上搜索。

推荐下载iOS中正则表达式的基本使用方法.docx

推荐下载iOS中正则表达式的基本使用方法

iOS中正则表达式的基本使用方法

一.第三方框架RegexKitLite的使用

 在ios项目中可以借用第三方框架RegexKitLite来简化对正则表达式的使用,使

用方法如下

 1.去RegexKitLite下载类库,解压出来会有一个例子包及2个文件,将那两个文

件添加到工程中,并导入到项目中。

下载地址:

 cocoachina/bbs/job.php?

action-download-pid-135286-tid-18111-aid-11143.html-Lv

 2.工程中添加libicucore.dylibframeworks。

 下面就是使用介绍(可拷贝到Xcode中观看会很方便)

 -(void)howToUseRegexKitLite

 {

 NSString*searchString=@”我正在#话题#吃饭@zhangsan你@lisi吃了没?

”;

 NSString*regexString=@”@\\w+”;

 //返回所有匹配成功的结果,并存放到一个数组里

 NSArray*array=[searchStringcomponentsMatchedByRegex:

regexString];

 NSLog(@”array:

%@”,array);//输出结果:

(“@zhangsan”,”@lisi”)

 //透过传入一个Regex进行字符串的比对,并且会将第一组比对出来的结果以

NSArray回传群组

 NSArray*array1=[searchStringcaptureComponentsMatchedByRegex:

regexString];

 NSLog(@”array1:

%@”,array1);//输出结果:

(“@zhangsan”)

 //同上者,一样会回传Regex所比对出来的字符串群组,但会回传全部的配对

组合

 NSArray*array2=[searchString

arrayOfCaptureComponentsMatchedByRegex:

regexString];

 NSLog(@”array2:

%@”,array2);//输出结果:

((“@zhangsan”),(“@lisi”))

 //判断字符串是否与Regex配对

 BOOLisMatched=[@”@zhangsan”isMatchedByRegex:

regexString];

 if(isMatched){

 NSLog(@”配对成功”);

 }

 //取得配对出来的第一個完整字串

 NSString*matchedString1=[searchStringstringByMatching:

regexString];

 NSLog(@”matchedString1:

%@”,matchedString1);//输出结果:

@zhangsan

 //将字符串中与Regex配对的结果进行替换

 NSString*replaceString=@”wangwu”;

 NSString*matchedString2=[searchString

stringByReplacingOccurrencesOfRegex:

regexStringwithString:

replaceString];

 NSLog(@”matchedString2:

%@”,matchedString2);//输出结果:

我正在#话题#吃

饭wangwu你wangwu吃了没?

 //如果是NSMutableString,则可以直接替换,并返回替换的次数

 NSMutableString*mutSearchString=[NSMutableStringstringWithString:

@”我正

在#话题#吃放@zhangsan你@lisi吃了没?

”];

 NSIntegermutMatchedString2=[mutSearchString

replaceOccurrencesOfRegex:

regexStringwithString:

replaceString];

 NSLog(@”mutMatchedString2:

%ld”,mutMatchedString2);//输出结果:

2

 //返回一个拆分后的字符串数组

 NSArray*array3=[searchStringcomponentsSeparatedByRegex:

regexString];

 NSLog(@”array3:

%@”,array3);//输出结果:

(“我正在#话题#吃饭”,”你”,”吃了

没?

”)

 }

 #pragmamarkRegexKitLite的使用总结

 /*

 RegexKitLite提供的方法都是透过NSString来操作,常用的方法:

 1.-(NSArray*)RKL_METHOD_PREPEND(componentsMatchedByRegex):

(NSString

*)regex

 返回所有匹配成功的结果,并存放到一个数组里

 2.-(NSArray*)captureComponentsMatchedByRegex:

(NSString*)regex;

 这个方法是透过传入一个Regex进行字串的比对,并且会将第一组比对出来的结

果以NSArray回传群组。

 3.-(NSArray*)arrayOfCaptureComponentsMatchedByRegex:

(NSString*)regex;

 這個方法如同上者,一样会回传Regex所比对出来的字串群组,但会回传全部的

配对组合。

 4.-(BOOL)isMatchedByRegex:

(NSString*)regex;

 判断字串是否与Regex配对,在进行资料验证的時候很实用。

 5.-(NSString*)stringByMatching:

(NSString*)regex;

 这方法则是会回传配对出来的第一個完整字串。

 6.-(NSString*)stringByReplacingOccurrencesOfRegex:

(NSString*)regex

withString:

(NSString*)replacement;

 将字串中与Regex配对的结果进行替换。

 7.-(NSInteger)replaceOccurrencesOfRegex:

(NSString*)regexwithString:

(NSString

*)replacement

 如果是NSMutableString,则可以直接替换,并返回替换的次数

 8.-(NSArray*)componentsSeparatedByRegex:

(NSString*)regex

 用于拆分,返回一个拆分后的字符串数组

 */

 二.正则表达式的使用

 -(void)howToUseRegex

 {

 #pragmamark1.正则表达式规则

 /*-------------------------------1.1普通字符-------------------------------*/

 //字母、数字、汉字、下划线、非特殊定义的标点符号,都是”普通字符”。

达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

 NSString*searchString1_1=@”abcde”;

 NSString*regexString1_1=@”c”;

 NSString*matchedString1_1=[searchString1_1stringByMatching:

regexString1_1];

 NSLog(@”matchedString1_1:

%@”,matchedString1_1);//输出结果:

c

 /*-------------------------------1.2简单的转义字符-------------------------------*/

 //一些不便书写的字符,在前面加“\”,如:

\n,\t,\\等

 NSString*searchString1_2=@”abc$de”;

 //记住在字符串中“\”需要用“\\”表示

 NSString*regexString1_2=@”\\$d”;

 NSString*matchedString1_2=[searchString1_2stringByMatching:

regexString1_2];

 NSLog(@”matchedString1_2:

%@”,matchedString1_2);//输出结果:

$d

 /*------------------------1.3能够与‘多种字符’匹配的表达式-------------------------*/

 /*

 .:

匹配除换行符以外的任意字符

 \w:

匹配字母或数字或下划线或汉字

 \s:

匹配任意的空白符

 \d:

匹配数字

 \b:

匹配单词的开始或结束

 */

 NSString*searchString1_3=@”abc123”;

 //正则表达式有一条规则:

最先开始的匹配拥有最高的优先权

 NSString*regexString1_3=@”\\d\\d”;

 NSString*matchedString1_3=[searchString1_3stringByMatching:

regexString1_3];

 NSLog(@”matchedString1_3:

%@”,matchedString1_3);//输出结果:

12

 /*---------------------1.4自定义能够匹配‘多种字符’的表达式-------------------------

*/

 tring1_4=[searchString1_4stringByMatching:

regexString1_4];

 NSLog(@”matchedString1_4:

%@”,matchedString1_4);//输出结果:

bc

 /*---------------------1.5修饰匹配次数的特殊符号------------------------------*/

 //使用表达式再加上修饰匹配次数的特殊符号,那么不用重复书写表达式就可

以重复匹配

 /*

 {n}:

表达式重复n次

 {m,n}:

表达式至少重复m次,最多重复n次

 {m,}:

表达式至少重复m次

 ?

:

匹配表达式0次或者1次,相当于{0,1}

 +:

表达式至少出现1次,相当于{1,}

 *:

表达式不出现或出现任意次,相当于{0,}

 */

 NSString*searchString1_5=@”Itcosts$12.5”;

 NSString*regexString1_5=@”\\d+\\.?

\\d”;

 NSString*matchedString1_5=[searchString1_5stringByMatching:

regexString1_5];

 NSLog(@”matchedString1_5:

%@”,matchedString1_5);//输出结果:

12.5

 /*--------------类似,本身不匹配任何字符,但是它要求它在匹配结果中所处位置

的左右两边,其中一边是“\w”范围,另一边是非”\w”的范围

 NSString*searchString1_6=@”@@@abc”;

 NSString*regexString1_6=@”.\\b.”;

 NSString*matchedString1_6=[searchString1_6stringByMatching:

regexString1_6];

 NSLog(@”matchedString1_6:

%@”,matchedString1_6);//输出结果:

@a

 #pragmamark2.正则表达式中的一些高级规则

 /*---------------------2.1匹配次数中的贪婪与非贪婪--------------------------*/

 //1)在使用修饰匹配次数的特殊符号”{m,n}”,“{m,}”,“?

”,“*”,“+”可以使同一个

表达式能够匹配不同的次数,这种重复匹配不定次数的表达式在匹配过程中,总是尽

可能多的匹配。

如:

 NSString*searchString2_1_1=@”dxxxdxxxd”;

 NSString*regexString2_1_1=@”(d)(\\w+)(d)”;

 NSString*matchedString2_1_1=[searchString2_1_1

stringByMatching:

regexString2_1_1];

 NSLog(@”matchedString2_1_1:

%@”,matchedString2_1_1);//输出结果:

dxxxdxxxd

 //2)在修饰匹配次数的特殊符号后再加上一个“?

”号,则可以使匹配次数不定

的表达式尽可能少的匹配,这种匹配原则叫作“非贪婪”模式,也叫作“勉强”模式

 NSString*regexString2_1_2=@”(d)(\\w+?

)(d)”;

 NSString*matchedString2_1_2=[searchString2_1_1

stringByMatching:

regexString2_1_2];

 NSLog(@”matchedString2_1_2:

%@”,matchedString2_1_2);//输出结果:

dxxxd

 /*---------------------2.2反向引用--------------------------------------*/

 //使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕

获的内容)可以在表达式或其它程序中作进一步的处理。

默认情况下,每个分组会自

动拥有一个组号,规则是:

从左向右,以分组的左括号为标志,第一个出现的分组

的组号为1,第二个为2,以此类推

 NSString*searchString2_2=@”gogo”;

 NSString*regexString2_2=@”\\b(\\w+)\\b\\s+\\1\\b”;

 NSString*matchedString2_2=[searchString2_2stringByMatching:

regexString2_2];

 *

 1)捕获

 (exp):

匹配exp,并捕获文本到自动命名的组里

 (?

nameexp):

匹配exp,并捕获文本到名称为name的组里,也可以写成

(?

’name’exp)

 (?

:

exp):

匹配exp,不捕获匹配的文本,也不给此分组分配组号零宽断言,

可节约性能,提高效率

 2)零宽断言

 (?

=exp):

匹配exp前面的位置

 (?

=exp):

匹配exp后面的位置

 (?

!

exp):

匹配后面跟的不是exp的位置

 (?

!

exp):

匹配前面不是exp的位置注释(?

#comment)这种类型的分组不对

正则表达式的处理产生任何影响,用于提供注释让人阅读

 */

 NSString*searchString2_3=@”I’msingingwhileyou’redancing.”;

 NSString*regexString2_3=@”\\b\\w+(?

=ing\\b)”;

 NSArray*matchedString2_3=[searchString2_3

componentsMatchedByRegex:

regexString2_3];

 NSLog(@”matchedString2_3:

%@”,matchedString2_3);//输出结果:

(sing,danc)

 //3.其他通用规则

 /*----------------3.1------------------------------------------*/

 //表达式中,可以使用“\xXX”和“\uXXXX”表示一个字符(”X”表示一个

十六进制数)

 /*

 \xXX:

编号在0~255范围的字符,比如:

空格可以使用“\x20”表示

 \uXXXX:

任何字符可以使用“\u”再加上其编号的4位十六进制数表示,比

如:

”\u4E2D”

 ?

:

修饰匹配次数为0次或1次。

要匹配“?

”字符本身,请使用“\?

 +:

修饰匹配次数为至少1次。

要匹配“+”字符本身,请使用“\+”

 *:

修饰匹配次数为0次或任意次。

要匹配“*”字符本身,请使用“\*”

 |:

左右两边表达式之间“或”关系。

匹配“|”本身,请使用“\|”

 “:

用在不带@的字符串中时,用\”来进行转义,用在带@的字符串中时,

用”“来进行转义

讯QQ号:

[1-9][0-9]{4,}(腾讯QQ号从10000开始)

 32中国邮政编码:

[1-9]\d{5}(?

!

\d)(中国邮政编码为6位数字)

 33IP地址:

\d+\.\d+\.\d+\.\d+(提取IP地址时有用)

 附录二:

参考资料

 正则表达式检测工具:

regexlab/zh/workshop.htm

 tool.oschina/regex

 参考文档:

regexlab/zh/regref.htm

 deerchao/tutorials/regex/regex.htm

 lxcnnblogs/

 tips:

感谢大家的阅读,本文由我司收集整编。

仅供参阅!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1