正则表达式-02 更多的方式
通过上一篇文章的学习,已经使用过”.”的正则表达式的使用,”.”的检索方式就是匹配任意的字符,但是对于其他的语法可能还不大清楚是怎么用的,现在列出一些正则表达式的语法,会帮助进一步的理解加深. 博文代码(点击下载) 语法: [ ]:匹配括号中的任何一个字符。例如正则表达式“b[aui]g”匹 配bug、big和bag,但是不匹配beg、baug。可以在括号中使?连字 符“-”来指定字符的区间来简化表?,例如正则表达式[0-9]可以匹配任何数字符,这样正则表达式“a[0-9]c”等价于“a[0123456789]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小写字母,“[A-Za-z0-9]”可以匹配任何的?小写字?母或者数字。 |:将两个匹配条件进行逻辑“或”运算。’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’则匹配 “zood”或”food”。 ():将 ()之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到?个临时区域,这个字符在字符串提取的时候?常有用。把一些字符表?为一个整体。改变优先级、定义提取组两个作用。 *:匹配0至多个在它之前的?表达式,和通配符*没关系。例如正则表达式“zo*”能匹配 “z” 、“zo”以及 “zoo”;因此“.*”意味着能够匹配任意字符串。”z(b|c)*”→zb、zbc、zcb、zccc、zbbbccc。”z(ab)*”能匹 配z、zab、zabab(?用括号改变优先级)。 +:匹配前面的子表达式一次或多次,和*对?(0到多次)。例如正则表达式9+匹配9、99、999等。“zo+”能匹配 “zo”以及 “zoo”,不能匹配”z”。 ?:匹配前?的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does”。一般用来匹配“可选部分”。 {n}:匹配确定的n次。“zo{2}”→zoo。例如,“e{2}” 不能匹配“bed”中 的“e”,但是能匹配“seed”中的两个“e”。 {n,} :?至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配 “seeeeeeeed”中的所有“e”。 {n,m}:最少匹配n次且最多匹配m 次。“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”。 ^: 非运算 a[^b] 除了b以为的字符 或者^a 以a开头 [ ]语法的代码:就是将中括号里面所需要检索的字符进行匹配,例子中中括号里面的字符是housnk,所以在字符串http:www.houxikun.com里面有中括号里面的字符都会加入到结果返回的数组中. int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString* string = @"http:www.houxikun.com";
NSString* pattern = @“[housnk]”;
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0,string.length)];
if(resultArray.count){
for (NSTextCheckingResult* result in resultArray) {
NSLog(@"%@",[string substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果: RegularExpression02[2915:303] h
RegularExpression02[2915:303] h
RegularExpression02[2915:303] o
RegularExpression02[2915:303] u
RegularExpression02[2915:303] s
RegularExpression02[2915:303] n
RegularExpression02[2915:303] k
RegularExpression02[2915:303] o
|语法的代码:例子中得检索规则是”http|housnk”,规则是检索对象里面含有http或者housnk就将这个结果加入到检索结果的数组中. int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString* string = @"http:www.housnk.com";
NSString* pattern = @"http|housnk";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0,[string substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果: RegularExpression02[2940:303] http
RegularExpression02[2940:303] housnk
()语法的代码:()的作用其实也就是对正则表达式运算的一个优先级限制,括号里面的优先进行判断,在字符串中如果含有http或者housnk的字符串,就将所得的结果添加到检索结果数组中. int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString* string = @"http:www.housnk.com";
NSString* pattern = @"h(ttp|ousnk)";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0,[string substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果: RegularExpression02[2953:303] http
RegularExpression02[2953:303] housnk
*的语法代码:这个描述起来有点复杂,会匹配前面的字符,就如ht*来说,可能匹配有的字符串是”h”,”ht”,”htt”三种情况 int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString* string = @"http:www.housnk.com";
NSString* pattern = @"ht*p";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0,[string substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果: RegularExpression02[3084:303] http
假设将字符创替换成:@“hthtp:www.housnk.com”;检索规则为:@”ht*p”;运行结果为:htp; +的语法代码:匹配+前面一个字符的多次检索,比如t+,可以检索t,tt,ttt,tttt诸如此类,但并不能匹配ht,htht,hththt这样的,只能多次检索+前的一个字符类型. int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString* string = @"http:www.housnk.com";
NSString* pattern = @"ht+p";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0,[string substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果: RegularExpression02[3107:303] http
?的语法代码:代码中@”h(ttp)?”能够匹配两种字符串,一种是”h”,另外一种是”http”; int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString* string = @"http:www.housnk.com";
NSString* pattern = @"h(ttp)?";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0,[string substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果: RegularExpression02[3121:303] http
RegularExpression02[3121:303] h
{n}和{n,}和{n,m}的语法代码: int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString* string = @"http:www.housnk.com";
NSString* pattern = @"w{2}";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0,[string substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果:{}里面的数字是代表匹配多少次该字符 RegularExpression02[3138:303] ww
int main(int argc,const char * argv[]) {
@autoreleasepool {
NSString* string = @"http:www.housnk.com";
NSString* pattern = @"w{2,}";
NSError* error = [[NSError alloc]init];
NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray* resultArray = [regularExpression matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0,[string substringWithRange:result.range]);
}
}else{
NSLog(@"检索无结果");
}
}
return 0;
}
运行结果:{n,}是代表匹配n次以上的,这里的代码中,被检索的字符串中有3个www,所以www会被作为结果加入到检索结果的数组中,同理,{n,m}是检索n次到m次的字符,如果这里的检索规则是”2,3”,结果就是”www”. RegularExpression02[3146:303] www
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |