Objective-C Cocoa应用程序中的正则表达式

dre*_*ves 173 regex cocoa objective-c

Initial Googling表明在Objective-C Cocoa应用程序中没有内置的方法来执行正则表达式.

所以有四个问题:

  1. 这是真的吗?

  2. 你在跟我开玩笑吗?

  3. 好的,那么你推荐一个不错的开源库吗?

  4. 在没有导入库的情况下,有什么方法可以使用NSScanner类?

小智 141

我注意到,从iOS 4.0开始,Apple提供了一个NSRegularExpression类.此外,从10.7开始,该类在OS X下可用.

  • 现在也是Mac OS X 10.7 (11认同)

mfa*_*kas 42

  1. 是的,Cocoa中没有正则表达式支持.如果您只对布尔匹配感兴趣,可以使用支持ICU正则表达式语法的NSPredicate.但通常你会对子表达式的匹配或位置感兴趣,而你无法通过NSPredicate得到它.
  2. 如前所述,您可以使用正则表达式POSIX函数.但是它们被认为是缓慢的,并且与其他解决方案(ICU/pcre)相比,正则表达式语法是有限的.
  3. 有许多OSS库,CocoaDev有一个广泛的列表.
  4. 例如,RegExKitLite不需要任何库,只需将.m和.h添加到项目中.

    (我对RegExKitLite的投诉是它通过类别扩展NSString,但它也可以被视为一个功能.它还使用操作系统附带的非公共ICU库,Apple不推荐这样做.)

  • iOS支持子串搜索的正则表达式,例如`[myString rangeOfString:@"regex_here"选项:NSRegularExpressionSearch]` (11认同)
  • 请记住,POSIX正则表达式函数不适用于unicode(仅限ASCII). (3认同)

avo*_*ade 19

RegexKit是我发现的最好的.非常可可:y.我在几个iPhone应用程序中使用"Lite"版本:

SourceForge上

lingonikorg


Ada*_*ght 11

您可以使用POSIX Regular Expressions库(Yay用于兼容POSIX的操作系统).尝试

man 3 regex
Run Code Online (Sandbox Code Playgroud)

  • 并且因为POSIX正则表达式函数仅适用于ASCII字符串. (5认同)

Mar*_*man 8

我用来解决REGEX和JSON解析问题的廉价和肮脏的黑客解决方案是创建一个UIWebView对象并注入Javascript函数来进行解析.然后javascript函数返回我关心的值(或值列表)的字符串.实际上,您可以存储为特定任务定制的小型库函数集,然后根据需要调用它们.

我不知道这种技术是否可以扩展到大量的重复解析请求,但是对于快速的事务处理,它可以完成工作,而不依赖于您可能不理解的任何额外的外部资源或代码.


Rob*_*ger 6

我喜欢使用PCRE的AGRegex框架,如果你习惯了PCRE语法,我会很方便.该框架的最佳版本是Colloquy IRC客户端中的最佳版本,因为它已升级为使用PCRE 6.7:

http://colloquy.info/project/browser/trunk/Frameworks/AGRegex

它非常轻巧,远远超过RegExKit(尽管当然不具备能力).


bba*_*iee 6

NSRegularExpression 从Mac OS X v10.7和IOS 4.0开始提供.


new*_*ple 5

在我搜索这个主题的过程中,我遇到了CocoaOniguruma,它使用Oniguruma,Ruby1.9 和 PHP5 背后的正则表达式引擎。与现有的OregKit(日语)相比,它似乎更新了一些。不确定这些与其他绑定如何叠加。