正则表达式-02 更多的方式

前端之家收集整理的这篇文章主要介绍了正则表达式-02 更多的方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

通过上一篇文章的学习,已经使用过”.”的正则表达式的使用,”.”的检索方式就是匹配任意的字符,但是对于其他的语法可能还不大清楚是怎么用的,现在列出一些正则表达式的语法,会帮助进一步的理解加深.

博文代码(点击下载)

语法:
.:匹配任何单个字符。例如正则表达式“b.g”能匹配如下字符串:“big”、“bug”、“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”。

[ ]:匹配括号中的任何一个字符。例如正则表达式“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开头
\d:代表一个数字,等同于[0-9]
\D:代表⾮数字,等同于[^0-9]
\s:代表换行符、Tab制表符等空⽩字符
\S:代表⾮空白字符
\w:匹配任何字类字符,包括下划线。与“[A-Za-z0-9_]”等效。
\W:⾮\w,等同于[^\w]

[ ]语法的代码:就是将中括号里面所需要检索的字符进行匹配,例子中中括号里面的字符是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;
假设将字符创替换成:@“htap:www.housnk.com”;检索规则为:@”ht*p”;运行结果为:检索无结果;因为ht*的检索结果只有三种情况:”h”,”htt”,后面再加上个”p”的检索,结果只能是”hp”,”htp”,”http”,现在将协议头换成了”htap”,自然没有检索到结果.

+的语法代码:匹配+前面一个字符的多次检索,比如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

猜你在找的正则表达式相关文章