xcode自带的

系统内部的方法和枚举的详细介绍

/**

1. 返回所有匹配结果的集合(适合,从一段字符串中提取我们想要匹配的所有数据)

*  - (NSArray *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

2. 返回正确匹配的个数(通过等于0,来验证邮箱,电话什么的,代替NSPredicate)

*  - (NSUInteger)numberOfMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

3. 返回第一个匹配的结果。注意,匹配的结果保存在  NSTextCheckingResult 类型中

*  - (NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

4. 返回第一个正确匹配结果字符串的NSRange

*  - (NSRange)rangeOfFirstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

5. block方法

*  - (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (^)(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop))block;

*/

/**

*  enum {

NSRegularExpressionCaseInsensitive = 1 << 0,  // 不区分大小写的

NSRegularExpressionAllowCommentsAndWhitespace  = 1 << 1,  // 忽略空格和# -

NSRegularExpressionIgnoreMetacharacters = 1 << 2,  // 整体化

NSRegularExpressionDotMatchesLineSeparators = 1 << 3,  // 匹配任何字符,包括行分隔符

NSRegularExpressionAnchorsMatchLines   = 1 << 4,  // 允许^和$在匹配的开始和结束行

NSRegularExpressionUseUnixLineSeparators   = 1 << 5,  // (查找范围为整个的话无效)

NSRegularExpressionUseUnicodeWordBoundaries = 1 << 6 // (查找范围为整个的话无效)

};

typedef NSUInteger NSRegularExpressionOptions;

*/

// 下面2个枚举貌似都没什么意义,除了在block方法中,一般情况下,直接给0吧

/**

*  enum {

NSMatchingReportProgress = 1 << 0,

NSMatchingReportCompletion   = 1 << 1,

NSMatchingAnchored   = 1 << 2,

NSMatchingWithTransparentBounds  = 1 << 3,

NSMatchingWithoutAnchoringBounds = 1 << 4

};

typedef NSUInteger NSMatchingOptions;

*/

/** 此枚举值只在5.block方法中用到

*  enum {

NSMatchingProgress   = 1 << 0,

NSMatchingCompleted   = 1 << 1,

NSMatchingHitEnd = 1 << 2,

NSMatchingRequiredEnd = 1 << 3,

NSMatchingInternalError   = 1 << 4

};

typedef NSUInteger NSMatchingFlags;

*/

// 测试字符串,把里面的电话号码解析出来

NSString *urlString = @"哈哈哈哈呵呵呵s15279107723在这里啊啊啊啊s15279107716";

NSError *error = NULL;

应用例子

// 根据匹配条件,创建了一个正则表达式(类方法,实例方法类似)

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:KPhoneRegex options:NSRegularExpressionCaseInsensitive error:&error];

if (regex != nil) {

// 3.....

NSTextCheckingResult *firstMatch = [regex firstMatchInString:urlString

options:0

range:NSMakeRange(0, [urlString length])];

if (firstMatch) {

NSRange resultRange = [firstMatch rangeAtIndex:0];

//从urlString中截取数据

NSString *result = [urlString substringWithRange:resultRange];

NSLog(@"result = %@",result);

}

// 2.....

NSUInteger number = [regex numberOfMatchesInString:urlString

options:0

range:NSMakeRange(0, [urlString length])];

NSLog(@"number = %ld",number);

// 5.....(坑爹的返回第一个匹配结果)

[regex enumerateMatchesInString:urlString options:0 range:NSMakeRange(0, [urlString length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {

NSLog(@"---%@",NSStringFromRange([result range]));

if (flags != NSMatchingInternalError) {

NSRange firstHalfRange = [result rangeAtIndex:0];

if (firstHalfRange.length > 0) {

NSString *resultString1 = [urlString substringWithRange:firstHalfRange];

NSLog(@"result1 = %@",resultString1);

}

}

*stop = YES;

}];

}

// 替换掉你要匹配的字符串

NSString *reString = [regex stringByReplacingMatchesInString:urlString

options:0

range:NSMakeRange(0, [urlString length])

withTemplate:@"(我就是替换的值)"];

NSLog(@"reString = %@",reString);

// 还有2个方法大家可以去尝试看看

// 1.

NSMutableArray *oneArray = [self _matchLinkWithStr:urlString withMatchStr:KPhoneRegex];

for (NSString *phone in oneArray) {

NSLog(@"phone = %@",phone);

}

// 1.....

- (NSMutableArray *)_matchLinkWithStr:(NSString *)str withMatchStr:(NSString *)matchRegex;

{

NSError *error = NULL;

NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:matchRegex

options:NSRegularExpressionCaseInsensitive

error:&error];

NSArray *match = [reg matchesInString:str

options:NSMatchingReportCompletion

range:NSMakeRange(0, [str length])];

NSMutableArray *rangeArr = [NSMutableArray array];

// 取得所有的NSRange对象

if(match.count != 0)

{

for (NSTextCheckingResult *matc in match)

{

NSRange range = [matc range];

NSValue *value = [NSValue valueWithRange:range];

[rangeArr addObject:value];

}

}

// 将要匹配的值取出来,存入数组当中

__block NSMutableArray *mulArr = [NSMutableArray array];

[rangeArr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

NSValue *value = (NSValue *)obj;

NSRange range = [value rangeValue];

[mulArr addObject:[str substringWithRange:range]];

}];

return mulArr;

}

你可能感兴趣的:(xcode自带的)