推荐下载iOS中正则表达式的基本使用方法.docx
《推荐下载iOS中正则表达式的基本使用方法.docx》由会员分享,可在线阅读,更多相关《推荐下载iOS中正则表达式的基本使用方法.docx(20页珍藏版)》请在冰豆网上搜索。
![推荐下载iOS中正则表达式的基本使用方法.docx](https://file1.bdocx.com/fileroot1/2022-12/15/dda1924f-c26c-4de7-9cfe-e21c1a8e30eb/dda1924f-c26c-4de7-9cfe-e21c1a8e30eb1.gif)
推荐下载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:
感谢大家的阅读,本文由我司收集整编。
仅供参阅!