一、Xcode的类:NSRegularExpression
使用正则表达式的步骤:
step一、定义规则(NSString)
step二、建立正则表达式的对象(NSRegularExpression)
step三、匹配字符串,返回数组(NSArray:存储的对象是NSTextCheckingResult类型的对象)
注意:在Xcode中
若是规则里有引号,就用“\”来表示字符的自己
//----------------------------------------------------------------
NSString *username = @"6gjkhdjkhgkjh7
”;//要匹配的字符串
1.定义规则
NSString *pattern = @"^\\d.*\\d$";
二、建立正则表达式对象
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
3.匹配字符串
NSArray *results = [regex matchesInString:username options:0 range:NSMakeRange(0, username.length)];
NSLog(@"%zd", results.count);
// 遍历结果
for (NSTextCheckingResult *result in results) {
NSLog(@"%@ %@", NSStringFromRange(result.range), [str substringWithRange:result.range]);
}
//——例2-----------------------
/**
1.判断字符串是否符合某个特定规则
* 判断某个字符串是否为QQ号码\电话号码\邮箱
*/
// 表情的规则
NSString *emotionPattern = @"\\[[0-9a-zA-Z\\u4e00-\\u9fa5]+\\]";
// @的规则
NSString *atPattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5]+";
// #话题#的规则
NSString *topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";
// url连接的规则
NSString *urlPattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))";
// | 匹配多个条件,至关于or\或
NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern];
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
// 2.匹配字符串
NSArray *results = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)];
// 3.遍历结果
for (NSTextCheckingResult *result in results) {
NSLog(@"%@ %@", NSStringFromRange(result.range), [str substringWithRange:result.range]);
}
//----------------------------------------------------------------
二、第三方库 RegexKitLite
这个库使用了分类(category)对NSString类进行了扩展
准备工做:
注:加载framework libicucore.dylib ,由于RegexKitLite是调用这个里面的API,苹果规定过不能使用私有的api和没有发布的api。RegexKitLite对NSString作了扩展,所以,咱们能够直接对NSString对象进行正则表达式的匹配。
//----------------------------------------------------------------
使用:
//一、用数组返回的结果,是Unicode编码
NSArray *cmps = [str componentsMatchedByRegex:pattern];
//二、遍历全部的匹配结果,一个一个输出
[str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
//*capturedStrings:用指针获取返回的值
//Range:返回起始位置和匹配到的字符串长度
//*stop =YES;//就会中止遍历
NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
}];
//三、以正则表达式为切割符,返回匹配到的结果以外的字符串
[str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
//*capturedStrings:用指针获取返回的值
//Range:返回起始位置和匹配到的字符串长度
NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
}];