#import <Foundation/Foundation.h>
@interface NSString (RegularExpression)
/**
* 匹配第一个符合正则语法的结果, 返回匹配的结果(字符串)
*
* @param pattern 正则语法
*
* @return 返回第一个匹配的字符串, 如果没有则返回nil
*/
- (NSString *)firstMatchStringWithPattern:(NSString *)pattern;
// 匹配第一个符合正则语法的结果, 返回匹配的结果(原字符串中的范围)
- (NSRange)firstMatchRangeWithPattern:(NSString *)pattern;
// 匹配所有符合正则语法的结果, 返回匹配的结果(字符串)
- (NSArray <NSString *> *)matchesStringWithPattern:(NSString *)pattern;
// 匹配所有符合正则语法的结果, 返回匹配的结果(原字符串中的范围)
- (NSArray <NSValue *> *)matchesRangeWithPattern:(NSString *)pattern;
@end
#import "NSString+RegularExpression.h"
@implementation NSString (RegularExpression)
- (NSRange)firstMatchRangeWithPattern:(NSString *)pattern
{
NSError *error;
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
if (error) {
NSLog(@"正则创建失败");
return NSMakeRange(0, 0);
}
NSTextCheckingResult *result = [regular firstMatchInString:self options:0 range:NSMakeRange(0, self.length)];
if (result == nil) {
NSLog(@"没有匹配结果");
return NSMakeRange(0, 0);
}
return result.range;
}
- (NSString *)firstMatchStringWithPattern:(NSString *)pattern
{
NSError *error;
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
if (error) {
NSLog(@"正则创建失败");
return nil;
}
NSTextCheckingResult *result = [regular firstMatchInString:self options:0 range:NSMakeRange(0, self.length)];
if (result == nil) {
NSLog(@"没有匹配结果");
return nil;
}
return [self substringWithRange:result.range];
}
- (NSArray <NSString *> *)matchesStringWithPattern:(NSString *)pattern
{
NSError *error;
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
NSArray <NSTextCheckingResult *> *resultArray = [regular matchesInString:self options:0 range:NSMakeRange(0, self.length)];
if (resultArray.count == 0) {
NSLog(@"没有匹配结果");
return nil;
}
NSMutableArray *tempArrM = [NSMutableArray array];
// 从每个Result当中获取子字符串
for (NSTextCheckingResult *result in resultArray) {
NSString *subString = [self substringWithRange:result.range];
[tempArrM addObject:subString];
}
return [tempArrM copy];
}
- (NSArray<NSValue *> *)matchesRangeWithPattern:(NSString *)pattern
{
NSError *error;
NSRegularExpression *regular = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
NSArray <NSTextCheckingResult *> *resultArray = [regular matchesInString:self options:0 range:NSMakeRange(0, self.length)];
if (resultArray.count == 0) {
NSLog(@"没有匹配结果");
return nil;
}
NSMutableArray *tempArrM = [NSMutableArray array];
// 从每个Result当中获取 包装了Range的NSValue
for (NSTextCheckingResult *result in resultArray) {
NSValue *value = [NSValue valueWithRange:result.range];
[tempArrM addObject:value];
}
return [tempArrM copy];
}
@end
工具类:正则表达式工具类
最新推荐文章于 2024-10-03 08:31:33 发布