当前位置:  开发笔记 > 编程语言 > 正文

Objective-C的正则表达式解决方案

如何解决《Objective-C的正则表达式解决方案》经验,为你挑选了4个好方法。

在Objective-C中使用正则表达式的最佳方法是什么?

似乎有一些开源项目提供正则表达式支持,任何人都可以推荐一个吗?

我也看了一下NSPredicate,任何人都可以建议任何正则表达式的例子吗?

背景:我想使用正则表达式主要用于验证,IP,电子邮件地址,内部ID等



1> Georg Schöll..:
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '.*@.*\..*'"];
BOOL result = [predicate evaluateWithObject:@"mail@domain.com"];

根据Predicate指南:

匹配
根据ICU v3,使用正则表达式比较,左手表达式等于右手表达式(有关详细信息,请参阅ICU用户指南中的正则表达式).

甚至还有一个由Apple编写的例子可以在指南中找到.

而不是SELF你也可以使用密钥路径.(也可能还有一些其他的文字.)



2> rjstelling..:

请阅读全文后过在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])+)\\])";



3> Marcus S. Za..:

桌面:像Vile先生提到的RegExKit.

iPhone:RegExKitLite效果很好.



4> Akku..:

试试自iOS 4.0以来可用的官方NSRegualExpression:

http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有