iPhone正则表达式捕获组

iPhone正则表达式捕获组,iphone,regex,ios4,Iphone,Regex,Ios4,既然苹果现在似乎拒绝使用链接到libicucore的应用程序(例如使用RegexKitLite的应用程序),那么让带有捕获组功能的正则表达式在iPhone应用程序中工作的最佳方式是什么?是否应该静态编译ICU或PCRE(可能使用RegexKit PCRE包装器)?有关导致拒绝使用RegexKitLite的应用程序的更多信息,请参阅 简而言之,仍然可以使用RegexKitLite并不被拒绝。我通过NSRegularExpression获得第一组,方法是用第一组替换命中: string=“abcde

既然苹果现在似乎拒绝使用链接到libicucore的应用程序(例如使用RegexKitLite的应用程序),那么让带有捕获组功能的正则表达式在iPhone应用程序中工作的最佳方式是什么?是否应该静态编译ICU或PCRE(可能使用RegexKit PCRE包装器)?

有关导致拒绝使用RegexKitLite的应用程序的更多信息,请参阅


简而言之,仍然可以使用RegexKitLite并被拒绝。

我通过NSRegularExpression获得第一组,方法是用第一组替换命中:

string=“abcde” pattern=“b(c)” =>hit=“bcd” =>group=“c”


谢谢你,这是一个很大的帮助,我没有看到这种反应。我已经为它写了一个包装器,但是我会考虑RexExtLITE用于未来的项目。使用PCRE的一个问题是它只能在UTF8编码的文本上运行(假设你想要Unicode,你可能会这样做)。另一方面,NSString使用UTF-16作为其逻辑抽象。这意味着“范围”不能简单地混为一谈。例如,PCRE中的匹配范围将是UTF8字节偏移量。对于NSString,相同的字符范围将是UTF-16字符偏移量。UTF8要求每个Unicode代码点有1-~5个字节,但UTF-16使用16位字符,这可以在1个16位的单位内代表大多数Unicode。PCRE提供了一些函数来提取范围,因为CString和NString对UTF-8之间的转换有很好的支持。虽然复制匹配项的效率较低,但我没有发现它对我的应用程序有什么意义。NSRegularExpression在iOS 4.0+中可用,因此它在iOS 3.0+机型上不起作用。
NSRegularExpression* regex=[NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
    NSRange range=[regex rangeOfFirstMatchInString:self  options:0 range:NSMakeRange(0, [self length])];
    String hit=[self substringWithRange:range];
    return [regex stringByReplacingMatchesInString:hit options:0 range:NSMakeRange(0, [hit length]) withTemplate:@"$1"];