rjs*_*ing 10 regex cocoa cocoa-touch objective-c
在Objective-C中使用正则表达式的最佳方法是什么?
似乎有一些开源项目提供正则表达式支持,任何人都可以推荐一个吗?
我也看了一下NSPredicate,任何人都可以建议任何正则表达式的例子吗?
背景:我想使用正则表达式主要用于验证,IP,电子邮件地址,内部ID等
Geo*_*lly 13
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '.*@.*\..*'"];
BOOL result = [predicate evaluateWithObject:@"mail@domain.com"];
Run Code Online (Sandbox Code Playgroud)
根据Predicate指南:
匹配
根据ICU v3,使用正则表达式比较,左手表达式等于右手表达式(有关详细信息,请参阅ICU用户指南中的正则表达式).
而不是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];
Run Code Online (Sandbox Code Playgroud)
验证电子邮件地址
如果NSString与正则表达式匹配,则NSPredicate(NSLikePredicateOperatorType)中的"LIKE"比较运算符通常用作测试的便捷方式.它比具有更多选项和替换功能的完整库更有优势,因为它已经存在于Cocoa中 - 没有库,没有链接,没有麻烦.
你可以做一个简单的测试:
NSPredicate *regExPredicate =
[NSPredicate predicateWithFormat:@"SELF MATCHES %@", regularExpressionString];
BOOL myStringMatchesRegEx = [regExPredicate evaluateWithObject:myString];
Run Code Online (Sandbox Code Playgroud)
剩下的唯一问题是:什么是可用于验证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])+)\\])";
Run Code Online (Sandbox Code Playgroud)
试试自iOS 4.0以来可用的官方NSRegualExpression:
| 归档时间: |
|
| 查看次数: |
14617 次 |
| 最近记录: |