-
Notifications
You must be signed in to change notification settings - Fork 0
/
RKLMatchEnumerator.m
57 lines (44 loc) · 1.26 KB
/
RKLMatchEnumerator.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#import <Foundation/NSArray.h>
#import <Foundation/NSRange.h>
#import "RegexKitLite.h"
#import "RKLMatchEnumerator.h"
@interface RKLMatchEnumerator : NSEnumerator {
NSString *string;
NSString *regex;
NSUInteger location;
}
- (id)initWithString:(NSString *)initString regex:(NSString *)initRegex;
@end
@implementation RKLMatchEnumerator
- (id)initWithString:(NSString *)initString regex:(NSString *)initRegex
{
if((self = [self init]) == NULL) { return(NULL); }
string = [initString copy];
regex = [initRegex copy];
return(self);
}
- (id)nextObject
{
if(location != NSNotFound) {
NSRange searchRange = NSMakeRange(location, [string length] - location);
NSRange matchedRange = [string rangeOfRegex:regex inRange:searchRange];
location = NSMaxRange(matchedRange) + ((matchedRange.length == 0) ? 1 : 0);
if(matchedRange.location != NSNotFound) {
return([string substringWithRange:matchedRange]);
}
}
return(NULL);
}
- (void) dealloc
{
[string release];
[regex release];
[super dealloc];
}
@end
@implementation NSString (RegexKitLiteEnumeratorAdditions)
- (NSEnumerator *)matchEnumeratorWithRegex:(NSString *)regexString
{
return([[[RKLMatchEnumerator alloc] initWithString:self regex:regexString] autorelease]);
}
@end