Answers:
例如,RegExKitLite不需要任何库,只需将.m和.h添加到您的项目中。
(我对RegExKitLite的抱怨是它通过类别扩展了NSString,但它也可以被认为是一项功能。它还使用了操作系统随附的非公开ICU库,Apple不建议这样做。)
[myString rangeOfString:@"regex_here" options:NSRegularExpressionSearch]
您可以使用POSIX正则表达式库(对于POSIX兼容OS为是)。尝试
man 3 regex
我喜欢使用PCRE的AGRegex框架,如果您习惯使用PCRE语法,则非常方便。该框架的最佳版本是Colloquy IRC客户端中的版本,因为它已升级为使用PCRE 6.7:
http://colloquy.info/project/browser/trunk/Frameworks/AGRegex
它非常轻巧,比RegExKit强得多(尽管当然不那么强大)。
NSRegularExpression
从Mac OS X v10.7和IOS 4.0开始可用。
在搜索该主题期间,我遇到了CocoaOniguruma,它使用Oniguruma(Ruby1.9和PHP5之后的正则表达式引擎)。与现有的OregKit(日语)相比,似乎有点新。不确定这些如何与其他绑定堆叠在一起。
谷歌搜索小工具,找到此库: RegexOnNSString
开源库,包含如下功能:
-(NSString *) stringByReplacingRegexPattern:(NSString *)regex withString:(NSString *) replacement caseInsensitive:(BOOL)ignoreCase
和使用NSRegularExpression
类。非常易于使用,无需担心任何事情。
请注意 NSRegularExpression
,如Datasmid所述功能自Mac OS X v10.7和IOS 4.0起可用。
我很容易 我将一个新的C ++文件添加到我的Objective C项目中,将其重命名为.mm,然后在其中创建一个标准C ++类。然后,在“ public:”部分中为C ++函数创建一个静态类方法,该函数采用NSString并返回NSString(或NSArray(如果需要的话))。然后,我将NSString转换为C ++ std :: string,如下所示:
// If anyone knows a more efficient way, let me know in the comments.
// The "if" condition below is because ObjC crashes if converting to
// std::string if the string is nil or empty.
// assume #include <string>
std::string s = "";
if (([sInput != nil]) && (!([sInput isEqualTo:@""]))) {
std::string sTemp([sInput UTF8String]);
s = sTemp;
}
从那里,我可以像这样使用regex_replace:
// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);
然后,我可以使用以下命令将std :: string转换回NSString:
NSString *sResponse2 = @(sResult.c_str());
如果仅将此C ++用于此函数,则可能会适合调用此文件extra.mm(类名Extra)并放入此静态类方法,然后在情况出现时添加其他静态类方法在C ++中这样做才有意义,因为在某些情况下,它的麻烦程度较小。(在某些情况下,ObjC用更少的代码行执行某些操作,而在某些情况下,C ++用更少的代码行执行此操作。)
PS还有另一种方法是使用.mm文件,但使用std :: string和std :: regex_replace()(或regex_match())进行Objective C包装。