It has always bothered me that Cocoa doesn't have Regular Expressions built in. Using PCRE 6.7, I've created a small Cocoa Framework that does Regular Expressions. I know there's the AGRegex that's up on sourceforge, but I decided to take my crack at making something that might be a little different. It's not complete yet, but I figured I'd write about it since I just created a subversion repository for it.
Here are the basics:
I chose to call methods on the strings instead of the regex objects because this is a little more like all other object oriented regular expression implementations and because I think it makes more sense that way.
Creating a regular expression is easy as:
PCRegex *regex = [PCRegex regexWithPattern:@"pattern"];
Matching regular expressions against strings is easy, too. With the previous regular expression defined:
#import <ObjCRegex/ObjCRegex.h> ... [@"This is the string that I want to match" match:regex]; [@"This string will match because it contains the word pattern" match:regex];
With connivence methods everything is extremely simple:
#import <ObjCRegex/ObjCRegex.h> ... [@"This is the string that I want to match" matchPattern:@"pattern"]; [@"This is the string that I want to match" matchPattern:@"str.*"];
Of course if you want something more powerful, you're wondering what I did to deal with backreferences. Again, it's pretty simple. Here's an example:
#import <ObjCRegex/ObjCRegex.h> ... NSArray *backrefArray; PCRegex *regex = [PCRegex regexWithPattern:@"([^ ]*) ([^ ]*)"]; [@"first second third" match:regex backreferences:backrefArray]; NSString *first_match = [[backrefArray objectAtIndex:1] string]; NSString *second_match = [[backrefArray objectAtIndex:2] string];
Like many other implementations, the 0th item in the backreference array is the fully matched string, so in the previous example it would be @"first second".
There are some things that are incomplete and/or you should know before you get excited about using it:
So if you're still reading, you may be interested in checking out the code which can be done via:
svn co svn://fadingred.org/objcregex/trunk objcregex
Enjoy!
Tags: Cocoa, Code, Objective-C, Regex
There is a way to validate a NSString against a regular expression without external libraries. Have a look at my website: http://www.stiefels.net/2007/01/24/regular-expressions-for-nsstring/
That's a good point, but you can only check for matches that way. You can't get backreferences.