回答:
iOS 4.0以降、AppleはNSRegularExpressionクラスを提供していることに気付きました。さらに、10.7以降、このクラスはOS Xで使用できます。
たとえばRegExKitLiteはライブラリを必要とせず、プロジェクトに.mと.hを追加するだけです。
(RegExKitLiteに対する私の不満は、カテゴリーを介してNSStringを拡張することですが、これも機能と見なすことができます。また、OSに付属する非公開のICUライブラリを使用します。これはAppleによって推奨されていません。)
[myString rangeOfString:@"regex_here" options:NSRegularExpressionSearch]
POSIX正規表現ライブラリを使用できます(POSIX準拠のOSの場合)。試す
man 3 regex
REGEXとJSONの解析問題を解決するために使用する安価で汚れたハックソリューションは、UIWebViewオブジェクトを作成し、解析を実行するJavaScript関数を挿入することです。次に、javascript関数は、気になる値(または値のリスト)の文字列を返します。実際、特定のタスク用にカスタマイズされた関数の小さなライブラリセットを保存して、必要に応じて呼び出すだけで済みます。
この手法が大量の繰り返し解析要求に対応できるかどうかはわかりませんが、トランザクションの処理を迅速に行うには、理解できない余分な外部リソースやコードに依存することなく、作業を完了できます。
PCREを使用するAGRegexフレームワークが好きです。PCRE構文に慣れている場合に便利です。PCRE 6.7を使用するようにアップグレードされているため、このフレームワークの最適なバージョンはColloquy IRCクライアントのバージョンです。
http://colloquy.info/project/browser/trunk/Frameworks/AGRegex
これは非常に軽量で、RegExKitよりもはるかに軽量です(もちろん、それほど能力はありません)。
NSRegularExpression
Mac OS X v10.7およびIOS 4.0以降で使用できます。
このトピックの私の検索の間に私は出くわしたCocoaOniguruma使用しています鬼車、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以降で利用可能であることに注意してください。
簡単にします。Objective Cプロジェクトに新しいC ++ファイルを追加し、名前を.mmに変更してから、内部に標準C ++クラスを作成します。次に、NSStringを受け取り、NSString(または、必要な場合はNSArray)を返すC ++関数の「public:」セクションで静的クラスメソッドを作成します。次に、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ラッパーを作成します。