2010-06-26 99 views
2

由於Apple現在似乎拒絕鏈接到libicucore的應用程序(例如使用RegexKitLite的應用程序),從iPhone應用程序中獲取具有捕獲組功能的正則表達式的最佳方法是什麼?是否應該靜態編譯ICU或PCRE(可能使用RegexKit PCRE包裝器)?iPhone正則表達式捕獲組

回答

1

有關使用RegexKitLite導致應用程序被拒絕的更多信息,請參閱this cocoa-dev post

簡短的回答是,仍然可以使用RegexKitLite和遭到拒絕。

+0

謝謝你,這是一個很大的幫助,我從來沒有見過這種反應。我已經[建立和靜態鏈接PCRE](http://github.com/hadronzoo/build-pcre-iphone)併爲它寫了一個包裝器,但我會考慮將來的項目使用RegexKitLite。 – hadronzoo 2010-06-30 19:45:24

+0

使用PCRE的問題之一是它只能在UTF8編碼的文本上運行(假設你需要Unicode,你可能會這麼做)。另一方面,NSStrings使用UTF-16作爲邏輯抽象。這意味着兩個「範圍」不能混爲一談。例如,PCRE中匹配的範圍將是UTF8字節偏移量。對於NSString,相同範圍的字符將是UTF-16字符偏移量。 UTF8每個Unicode代碼點需要1〜5個字節,但UTF-16使用16位字符,這可以在1個16位單元中代表大部分Unicode。 – johne 2010-07-01 00:21:07

+0

PCRE提供了一些函數來提取範圍作爲cstrings和NString有很好的支持轉換和UTF-8轉換。儘管複製匹配效率較低,但我還沒有發現它對於我的應用程序很重要。 – hadronzoo 2010-07-01 05:15:07

0

我通過與第一基取代的命中獲得經由NSRegularExpression第一組:

字符串= 「ABCDE」 圖案= 「B(C)」。 =>觸及= 「BCD」 =>組= 「C」

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"]; 
+0

NSRegularExpression在iOS 4.0+中可用,所以它不適用於iOS3.0 +型號。 – 2011-04-15 11:51:11