1,正則表達式的基本使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern = @"[0-9]";
NSRegularExpression *regularExp = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
//1.2誓斥,利用對象進行判斷(test是你要從中查找的字符串)
NSArray *results = [regularExp matchesInString:test options:0 range:NSMakeRange(0, test.length)];
//2,輸出結(jié)果毕谴,注意遍歷的時候里面的子類是:NSTextCheckingResultfor
for (NSTextCheckingResult *result in results) {
NSLog(@"%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}
2距芬,正則表達式的規(guī)則:
2.1框仔,查找指定的對象(比如“張”字):
NSString *pattern = @"張";//直接寫在里面2.2,查找指定對象中的任何一個:
注意??:數(shù)字可以簡化用\d表示银舱,oc中需要轉(zhuǎn)義跛梗,即用\\d表示
任意一個數(shù)字:
NSString *pattern = @"[1234567890]";
//@"[1234567890]"也可以簡化成@"[0-9]"茄袖,中括號代表查找內(nèi)部內(nèi)容的任何一個
NSString *pattern = @"[0-9]";
NSString *pattern = @"\\d";比如說任何一個小寫字母:
NSString *pattern = @"[a-z]";比如說任何一個字母:
NSString *pattern = @"[a-zA-Z]";比如說任何一個字母或者數(shù)字:
NSString *pattern = @"[a-zA-Z0-9]";比如說“張三毛”三個字中的其中任何一個:
NSString *pattern = @"[張三毛]";//中括號代表查找內(nèi)部內(nèi)容的任何一個2.3,查找指定對象中同類型連續(xù)的:
比如說有多少個兩個數(shù)字一起的:
NSString *pattern = @"[0-9][0-9]"聂薪;//NSString *test = @"1234567890"蝗羊,test中輸出結(jié)果是5耀找,因為有5對
NSString *pattern = @"\d\d";//這種方式還可以用大括號簡化业崖,如兩個連在一起的數(shù)字双炕,用@“\d{2}”表示比如說有多少個五個個數(shù)字一起的:
NSString *pattern = @"\\d{5}";比如說三個數(shù)字兩個字母a連在一起:
NSString *pattern = @"\\d{3}a{2}";比如說2-4個數(shù)字連在一起的:
NSString *pattern = @"\\d{2-4}";//1234輸出結(jié)果為1妇斤,12345輸出結(jié)果為1站超,123456輸出結(jié)果為2死相!2.4算撮,特殊字符在正則中的作用
钮惠? :0個或者1個// @"k58k789"結(jié)果為8七芭,@"k58"結(jié)果為4狸驳,@"k5"結(jié)果為3
* : 0個或者多個// @"k58k789"結(jié)果為5撰糠,@"k58"結(jié)果為3辩昆,@"k5"結(jié)果為3
+ : 至少一個(一般用+比較多)// @"k58k789"結(jié)果為2,@"k58"結(jié)果為1术辐,@"k5"結(jié)果為1
^ : 匹配字符串的開始
NSString *pattern = @"^\\d"http://字符串必須以數(shù)字開頭,@"1k5dd324"結(jié)果為1
NSString *pattern = @"^\\d{3}"http://字符串必須以3個數(shù)字開頭猾骡,@"1k5dd324"結(jié)果為0幢哨,@"231k5dd324"結(jié)果為1$ : 匹配字符串的結(jié)束
NSString *pattern = @"\\d$"http://字符串必須以數(shù)字結(jié)束狮含,@"1k5dd324"結(jié)果為1
NSString *pattern = @"\\d{3}$"http://字符串必須以3個數(shù)字結(jié)束蔚龙,@"1k5dd324"結(jié)果為12.5木羹,查找以數(shù)字開頭并以數(shù)字結(jié)尾:
NSString *pattern = @"^\\d[0-9a-zA-Z]*\\d$";//*星號不可以省略抛人,這行還可以簡化如下
NSString *pattern = @"^\\d.*\\d$";//.代表任何字符妖枚, .*代表任意零個或者多個字符
3,正則表達式幾種常見應(yīng)用場景:
- 3.1,正則判斷是否是QQ號碼:
- 5-11位數(shù)字
- 非0開頭
NSString *pattern = @"^[1-9]\\d{4,10}$";
- 3.2续誉,正則判斷是否是手機號碼:
- 11位數(shù)字
- 13/15/17/183開頭
NSString *pattern = @"^1[3578]\\d{9}$";
- 3.3, 正則判斷是否是IP地址:
1-3個數(shù)字-1-3個數(shù)字-1-3個數(shù)字-1-3個數(shù)字
NSString *pattern = @“((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))”;
- 3.4, 正則匹配中文:
NSString *pattern = @"[\\u4e00-\\u9fa5]";
- 3.5, 正則匹配url:
NSString *pattern = @"(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?";
4,取出正則表達式中匹配的內(nèi)容并解析:
NSString *test = @"jack13412rosee3323fdf543589dkkd";
//1,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern = @"[a-zA-Z]+";
NSRegularExpression *regularExp = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
//1.2盒发,利用對象進行判斷
NSArray *results = [regularExp matchesInString:test options:0 range:NSMakeRange(0, test.length)];
//2拼卵,輸出結(jié)果蛮艰,注意遍歷的時候里面的子類是:NSTextCheckingResult
for (NSTextCheckingResult *result in results) {
NSLog(@"%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}
5,匹配#袜刷,@和[]內(nèi)容
//即將到來的秀恩愛高峰期[拜拜]@搞笑補習(xí)班即將到來的秀恩愛高峰期[拜拜]
NSString *test = @"即[abvc]將到來的秀恩愛高峰期[拜拜]@搞笑補習(xí)班:即將到http://c.biancheng.net/cpp/html/1435.html 來的秀恩愛高峰期[拜拜]#hahahaha# http://c.biancheng.net/cpp/html/1435.html";
- 匹配[]內(nèi)容
//1,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]";
NSRegularExpression *regularExp = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
//1.2奸披,利用對象進行判斷
NSArray *results = [regularExp matchesInString:test options:0 range:NSMakeRange(0, test.length)];
for (NSTextCheckingResult *result in results) {
NSLog(@"--000%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}
- 匹配#內(nèi)容
//1,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern01 = @"\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#";
NSRegularExpression *regularExp01 = [[NSRegularExpression alloc] initWithPattern:pattern01 options:0 error:nil];
//1.2,利用對象進行判斷
NSArray *results01 = [regularExp01 matchesInString:test options:0 range:NSMakeRange(0, test.length)];
for (NSTextCheckingResult *result in results01) {
NSLog(@"--001%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}
- 匹配@內(nèi)容
//1颂斜,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern02 = @"\\@[0-9A-Za-z\\u4e00-\\u9fa5]+";
NSRegularExpression *regularExp02 = [[NSRegularExpression alloc] initWithPattern:pattern02 options:0 error:nil];
//1.2,利用對象進行判斷
NSArray *results02 = [regularExp02 matchesInString:test options:0 range:NSMakeRange(0, test.length)];
for (NSTextCheckingResult *result in results02) {
NSLog(@"--002%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}
- 匹配url內(nèi)容
//1,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern03 = @"(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?";
NSRegularExpression *regularExp03 = [[NSRegularExpression alloc] initWithPattern:pattern03 options:0 error:nil];
//1.2,利用對象進行判斷
NSArray *results03 = [regularExp03 matchesInString:test options:0 range:NSMakeRange(0, test.length)];
for (NSTextCheckingResult *result in results03) {
NSLog(@"--002%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}
6同木,第三方框架RegexKitLite:
- 6.1彤路,使用??:
- 1,改為MRC模式:-fno-objc-arc
2,需要添加動態(tài)庫: libicucore.dylib
6.2,使用方法:
6.2.1检眯,正向查找普通方法:
查找特殊字符
NSString *str = @"即[][abvc]將到來的#秀恩愛#高峰期[拜拜]@搞笑補習(xí)班:即將到http://c.biancheng.net/cpp/html/1435.html 來的秀恩愛高峰期[拜拜]#hahahaha# http://c.biancheng.net/cpp/html/1435.html";
//找出表情內(nèi)容锰瘸,如[拜拜]
NSString *emoPattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]";
NSArray *enoResults = [str componentsMatchedByRegex:emoPattern];
NSLog(@"表情內(nèi)容是---%@",enoResults);
//找出@內(nèi)容,如@搞笑補習(xí)班
NSString *atPattern = @"\\@[a-zA-Z\\u4e00-\\u9fa5]+";
NSArray *atResults = [str componentsMatchedByRegex:atPattern];
NSLog(@"@內(nèi)容是---%@",atResults);
//找出@話題內(nèi)容倒脓,如#秀恩愛#
NSString *topicPattern = @"\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#";
NSArray *topicArray = [str componentsMatchedByRegex:topicPattern];
NSLog(@"熱門話題的內(nèi)容是---%@",topicArray);
- 6.2.2,正向查找高級方法:
- 查找特殊字符高級
NSString *str = @"即[][abvc]將到來的#秀恩愛#高峰期[拜拜]@搞笑補習(xí)班:即將到http://c.biancheng.net/cpp/html/1435.html 來的秀恩愛高峰期[拜拜dd]#hahahaha# http://c.biancheng.net/cpp/html/1435.html";
//找出表情內(nèi)容饲做,如[拜拜]
NSString *emoPattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]";
//找出@內(nèi)容盆均,如@搞笑補習(xí)班
NSString *atPattern = @"\\@[a-zA-Z\\u4e00-\\u9fa5]+";
//找出@話題內(nèi)容,如#秀恩愛#
NSString *topicPattern = @"\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#";
//這里直接把三個查找的對象合并一下一下子全部輸出了就不在一一輸出了
NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@",emoPattern, atPattern,topicPattern];
[str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
NSLog(@"range:%@, str:%@",NSStringFromRange(*capturedRanges), *capturedStrings);
}];
- 6.2.2,反向查找方法:
- 跟正向查找相反唇敞,查找特殊字符以外的所有其他字符
NSString *str = @"即[][abvc]將到來的#秀恩愛#高峰期[拜拜]@搞笑補習(xí)班:即將到http://c.biancheng.net/cpp/html/1435.html 來的秀恩愛高峰期[拜拜dd]#hahahaha# http://c.biancheng.net/cpp/html/1435.html";
//找出表情內(nèi)容,如[拜拜]
NSString *emoPattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]";
//找出@內(nèi)容模叙,如@搞笑補習(xí)班
NSString *atPattern = @"\\@[a-zA-Z\\u4e00-\\u9fa5]+";
//找出@話題內(nèi)容,如#秀恩愛#
NSString *topicPattern = @"\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#";
//這里直接把三個查找的對象合并一下一下子全部輸出了就不在一一輸出了渠啊,只有這里的方法和正向查找不同替蛉,注意分辨
NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@",emoPattern, atPattern,topicPattern];
[str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
NSLog(@"range:%@, str:%@",NSStringFromRange(*capturedRanges), *capturedStrings);
}];