News
OgreKit Tutorial #2
Here are some examples of using OgreKit:
In NSMutableString, -chomp remove all newlines ('\n') anywhere in a mutable string.
NSObject subclass: SmalltalkTool
[
run
[
| target |
target := NSMutableString stringWithString: 'alphabetagammadelta\n\n\n'.
target length log.
target chomp.
target length log.
]
]
In OGRegularExpression, -replaceAllMatchesInString:withString: replaces all matched strings.
NSObject subclass: SmalltalkTool
[
run
[
| regex target result |
regex := OGRegularExpression regularExpressionWithString:'a[^a]*a'.
target := 'alphabetagammadelta'.
result := regex replaceAllMatchesInString:target withString: '###'.
target log.
result log.
]
]
You can even swap the matched substring like this:
NSObject subclass: SmalltalkTool
[
run
[
| regex target result |
regex := OGRegularExpression regularExpressionWithString:'(a)([^a]*a)'.
target := 'alphabetagammadelta'.
result := regex replaceAllMatchesInString:target withString: '(\2)(\1)'.
target log.
result log.
]
]
OgreKit also supports various regular expression syntax:
OgrePOSIXBasicSyntax POSIX Basic RE
OgrePOSIXExtendedSyntax POSIX Extended RE
OgreEmacsSyntax Emacs
OgreGrepSyntax grep
OgreGNURegexSyntax GNU regex
OgreJavaSyntax Java (Sun java.util.regex)
OgrePerlSyntax Perl
OgreRubySyntax Ruby (default)
OgreSimpleMatchingSyntax Simple Matching
Now, let's go back to Objective-C. Instead of using regular expression to replace string, you can have a delegate method for that. Use -replaceAllMatchesInString:delegate:replaceSelector:contextInfo: to specify the delegate and method, then write your own replace method. Here, the replace method is -count:contextInfo:, which will return the number of matched letter.
(void) testReplaceDelegate
{
OGRegularExpression *regex = [OGRegularExpression regularExpressionWithString: @"a[^a]*a"];
NSString *target = @"alphabetagammadelta";
NSString *result = [regex replaceAllMatchesInString: target
delegate: self
replaceSelector: @selector(count:contextInfo:)
contextInfo: nil];
NSLog(@"Target %@", target);
NSLog(@"Result %@", result);
}
- (NSString *) count: (OGRegularExpressionMatch *) match
contextInfo: (id) contextInfo
{
return [NSString stringWithFormat: @"(%d)", [[match matchedString] length]];
}
The result will be:
Target alphabetagammadelta
Result (5)bet(3)mm(6)