在Objective-C中使用正则表达式的最佳方法是什么?
似乎有一些开源项目提供正则表达式支持,任何人都可以推荐一个吗?
我也看了一下NSPredicate
,任何人都可以建议任何正则表达式的例子吗?
背景:我想使用正则表达式主要用于验证,IP,电子邮件地址,内部ID等
NSPredicate *predicate; predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '.*@.*\..*'"]; BOOL result = [predicate evaluateWithObject:@"mail@domain.com"];
根据Predicate指南:
匹配
根据ICU v3,使用正则表达式比较,左手表达式等于右手表达式(有关详细信息,请参阅ICU用户指南中的正则表达式).
甚至还有一个由Apple编写的例子可以在指南中找到.
而不是SELF
你也可以使用密钥路径.(也可能还有一些其他的文字.)
请阅读全文后过在http://cocoawithlove.com.
在Cocoa中,NSPredicate的工作方式与SQL的"WHERE"子句大致相同.NSPredicate被带到iPhone的主要原因是NSPredicate在核心数据中履行了与"WHERE"子句在SQL中实现相同的角色 - 允许持久存储获取满足特定条件的对象.
// given an NSDictionary created used the above method named "row"... NSPredicate *johnSmithPredicate = [NSPredicate predicateWithFormat:@"firstname = 'John' AND lastname = 'Smith'"]; BOOL rowMatchesPredicate = [johnSmithPredicate evaluateWithObject:row];
验证电子邮件地址
如果NSString与正则表达式匹配,则NSPredicate(NSLikePredicateOperatorType)中的"LIKE"比较运算符通常用作测试的便捷方式.它比具有更多选项和替换功能的完整库更有优势,因为它已经存在于Cocoa中 - 没有库,没有链接,没有麻烦.
你可以做一个简单的测试:
NSPredicate *regExPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regularExpressionString]; BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject:myString];
剩下的唯一问题是:什么是可用于验证NSString是否包含语法上有效的电子邮件地址的正则表达式?
NSString *emailRegEx = @"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}" @"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" @"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-" @"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5" @"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" @"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" @"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";
桌面:像Vile先生提到的RegExKit.
iPhone:RegExKitLite效果很好.
试试自iOS 4.0以来可用的官方NSRegualExpression:
http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html