二.正则表达式的使用
- (void)howToUseRegex
{
#pragma mark 1.正则表达式规则
/*-------------------------------1.1普通字符-------------------------------*/
// 字母、数字、汉字、下划线、非特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
NSString *searchString1_1 = @"abcde";
NSString *regexString1_1 = @"c";
NSString *matchedString1_1 = [searchString1_1 stringByMatching: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_2 stringByMatching: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_3 stringByMatching:regexString1_3];
NSLog(@"matchedString1_3:%@",matchedString1_3); // 输出结果: 12
/*---------------------1.4自定义能够匹配 '多种字符' 的表达式-------------------------*/
// 使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符。用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。[]本身就隐含了“或”的关系,在[]中使用“|”表示“或”的关系是不对的,这样做只是多了一个普通字符“|”,用来匹配“|”字符本身,()也是同样道理。 如:
/*
[ab5@] : 匹配 "a" 或 "b" 或 "5" 或 "@"
[^abc] : 匹配 "a","b","c" 之外的任意一个字符
[f-k] : 匹配 "f"~"k" 之间的任意一个字母
[^A-F0-3] : 匹配 "A"~"F","0"~"3" 之外的任意一个字符
*/
NSString *searchString1_4 = @"abc123";
NSString *regexString1_4 = @"[bcd][bcd]";
NSString *matchedString1_4 = [searchString1_4 stringByMatching: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 = @"It costs $12.5";
NSString *regexString1_5 = @"\\d+\\.?\\d";
NSString *matchedString1_5 = [searchString1_5 stringByMatching:regexString1_5];
NSLog(@"matchedString1_5:%@",matchedString1_5); // 输出结果: 12.5