准备工作
使用RegexKitLite正则表达式需要以下工作:
1.RegexKitLite官方网址(内含使用教程):http://regexkit.sourceforge.net/RegexKitLite
2.下载地址:http://downloads.sourceforge.net/regexkit/RegexKitLite-4.0.tar.bz2
3.将RegexKitLite.h和RegexKitLite.m引入到工程中。
4.引入”libicucore.dylib”框架
5.需要在处理的类中导入”RegexKitLite.h”
RegexKitLite框架实例
#import <Foundation/Foundation.h>
@interface NSString (Extension)
- (BOOL)isQQ;
- (BOOL)isPhoneNumber;
- (BOOL)isIPAddress;
@end
#import "NSString+Extension.h"
@implementation NSString (Extension)
- (BOOL)match:(NSString *)pattern
{
// 1.创建正则表达式
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
// 2.测试字符串
NSArray *results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)];
return results.count > 0;
}
- (BOOL)isQQ
{
// 1.不能以0开头
// 2.全部是数字
// 3.5-11位
return [self match:@"^[1-9]\\d{4,10}$"];
}
- (BOOL)isPhoneNumber
{
// 1.全部是数字
// 2.11位
// 3.以13\15\18\17开头
return [self match:@"^1[3578]\\d{9}$"];
// JavaScript的正则表达式:\^1[3578]\\d{9}$\
}
- (BOOL)isIPAddress
{
// 1-3个数字: 0-255
// 1-3个数字.1-3个数字.1-3个数字.1-3个数字
return [self match:@"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"];
}
@end
RegexKitLite框架
#import <Foundation/Foundation.h>
#import "NSString+Extension.h"
#import "RegexKitLite.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *str = @"#呵呵呵#[偷笑] http://foo.com/blah_blah #解放军#//http://foo.com/blah_blah @Ring花椰菜:就#范德萨发生的#舍不得打[test] 就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了 说点啥好呢…… //@toto97:@崔西狮 蹦米咋不揍他#哈哈哈# http://foo.com/blah_blah";
// NSString *str = @"#呵呵呵#返回加快速度会尽#解放军#快发货看电视#好几件#发货了速度了恢复良好";
// 表情的规则
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]|/)))";
NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern];
// NSArray *cmps = [str componentsMatchedByRegex:pattern];
// 遍历所有的匹配结果
[str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
}];
NSLog(@"-------------");
// 以正则表达式为分隔符
[str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
}];
}
return 0;
}
void test2()
{
NSString *str = @"#呵呵呵#[偷笑] http://foo.com/blah_blah #解放军#//http://foo.com/blah_blah @Ring花椰菜:就#范德萨发生的#舍不得打[test] 就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了 说点啥好呢…… //@toto97:@崔西狮 蹦米咋不揍他#哈哈哈# http://foo.com/blah_blah";
/**
1.判断字符串是否符合某个特定规则
* 判断某个字符串是否为QQ号码\电话号码\邮箱
2.截取字符串中符合某个特定规则的内容
* 截取@"#呵呵呵#[偷笑]5345 http://foo.com/blah_blah #解放军# 58937985"的所有话题\表情\链接
*/
// 1.创建正则表达式
// NSString *pattern = @"[a-zA-Z]{1,}";
// NSString *pattern = @"[a-zA-Z]+";
// 表情的规则
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]);
}
}
/**
* 正则表达式的基本使用
*/
void test1()
{
NSString *username = @"6gjkhdjkhgkjh7";
// NSString *pattern = @"^\\d{3}";
// NSString *pattern = @"\\d{3}$";
// 1.创建正则表达式
NSString *pattern = @"^\\d.*\\d$";
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
// 2.测试字符串
NSArray *results = [regex matchesInString:username options:0 range:NSMakeRange(0, username.length)];
NSLog(@"%zd", results.count);
/**
使用正则表达式的步骤:
1.创建一个正则表达式对象:定义规则
2.利用正则表达式对象 来测试 相应的字符串
*/
Pattern : 样式\规则
NSString *pattern = @"ab7";
[] : 找到内部的某一个字符即可
NSString *pattern = @"[0123456789]";
NSString *pattern = @"[0-9]";
NSString *pattern = @"[a-zA-Z0-9]";
NSString *pattern = @"[0-9][0-9]";
NSString *pattern = @"\\d\\d\\d";
NSString *pattern = @"\\d{2,4}";
? + *
? : 0个或者1个
+ : 至少1个
* : 0个或者多个
}
/**
* 普通的做法:检测全数字
*/
void test()
{
NSString *username = @"5347858h7";
BOOL flag = YES;
for (int i = 0; i<username.length; i++) {
unichar c = [username characterAtIndex:i];
if (!(c >= ‘0‘ && c <= ‘9‘)) {
flag = NO;
break;
}
}
if (flag) {
NSLog(@"用户名正确");
} else {
NSLog(@"里面包含了非数字");
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 18:39:02