Das anfängliche Googeln zeigt an, dass es in einer Objective-C Cocoa-Anwendung keine integrierte Möglichkeit gibt, reguläre Ausdrücke auszuführen.
Also vier Fragen:
Stimmt das wirklich?
Willst du mich verarschen?
Ok, gibt es dann eine nette Open-Source-Bibliothek, die Sie empfehlen?
Was sind Möglichkeiten, nahe genug zu kommen, ohne eine Bibliothek zu importieren, vielleicht mit der NSScanner-Klasse?
objective-c
regex
cocoa
träumt
quelle
quelle
Antworten:
Ich habe festgestellt, dass Apple ab iOS 4.0 eine NSRegularExpression-Klasse bereitstellt . Darüber hinaus ist die Klasse ab 10.7 unter OS X verfügbar .
quelle
Für RegExKitLite sind beispielsweise keine Bibliotheken erforderlich. Fügen Sie einfach die Dateien .m und .h zu Ihrem Projekt hinzu.
(Meine Beschwerde gegen RegExKitLite ist, dass es NSString über die Kategorie erweitert, aber es kann auch als Funktion betrachtet werden. Außerdem werden die nicht öffentlichen ICU-Bibliotheken verwendet, die mit dem Betriebssystem geliefert werden, was von Apple nicht empfohlen wird.)
quelle
[myString rangeOfString:@"regex_here" options:NSRegularExpressionSearch]
RegexKit ist das beste, das ich bisher gefunden habe. Sehr Kakao: y. Ich verwende die "Lite" -Version in mehreren unserer iPhone-Apps:
Quellschmiede
lingonikorg
quelle
Sie können die POSIX Regular Expressions-Bibliothek verwenden (Yay für ein POSIX-kompatibles Betriebssystem). Versuchen
quelle
Die billige und schmutzige Hack-Lösung, mit der ich REGEX- und JSON-Parsing-Probleme löse, besteht darin, ein UIWebView-Objekt zu erstellen und Javascript-Funktionen einzufügen, um das Parsing durchzuführen. Die Javascript-Funktion gibt dann eine Zeichenfolge des Werts (oder der Werteliste) zurück, der mir wichtig ist. Tatsächlich können Sie eine kleine Bibliothek mit Funktionen speichern, die für bestimmte Aufgaben angepasst sind, und diese dann nach Bedarf aufrufen.
Ich weiß nicht, ob diese Technik auf große Mengen wiederholter Parsing-Anforderungen skaliert werden kann, aber für schnelle Transaktionsaufgaben wird die Aufgabe erledigt, ohne von zusätzlichen externen Ressourcen oder Code abhängig zu sein, die Sie möglicherweise nicht verstehen.
quelle
Ich mag das AGRegex-Framework, das PCRE verwendet, praktisch, wenn Sie an die PCRE-Syntax gewöhnt sind. Die beste Version dieses Frameworks ist die im Colloquy IRC-Client, da es auf PCRE 6.7 aktualisiert wurde:
http://colloquy.info/project/browser/trunk/Frameworks/AGRegex
Es ist sehr leicht, viel mehr als RegExKit (obwohl es natürlich nicht so fähig ist).
quelle
NSRegularExpression
ist seit Mac OS X 10.7 und IOS 4.0 verfügbar.quelle
Bei meiner Suche zu diesem Thema bin ich auf CocoaOniguruma gestoßen , das Oniguruma verwendet , die Engine für reguläre Ausdrücke hinter Ruby1.9 und PHP5. Es scheint etwas neuer im Vergleich zum vorhandenen OregKit (auf Japanisch). Nicht sicher, wie sich diese gegen andere Bindungen stapeln.
quelle
Googeln ein wenig, fand diese Bibliothek: RegexOnNSString
Open Source Bibliothek mit Funktionen wie:
und mit
NSRegularExpression
Klasse. Ganz einfach zu bedienen und Sie müssen sich um nichts kümmern.Bitte beachten Sie, dass dies
NSRegularExpression
seit Mac OS X 10.7 und IOS 4.0 verfügbar ist, wie von Datasmid erwähnt.quelle
Ich mache es einfach. Ich füge meinem Objective C-Projekt eine neue C ++ - Datei hinzu, benenne sie in .mm um und erstelle dann eine Standard-C ++ - Klasse darin. Dann erstelle ich im Abschnitt "public:" eine statische Klassenmethode für eine C ++ - Funktion, die einen NSString verwendet und einen NSString zurückgibt (oder NSArray, wenn Sie dies wünschen). Ich konvertiere dann NSString in C ++ std :: string wie folgt:
Von dort aus kann ich regex_replace wie folgt verwenden:
Dann kann ich diesen std :: string wieder in einen NSString konvertieren mit:
Wenn Sie dieses C ++ nur für diese Funktion verwenden, ist es möglicherweise geeignet, diese Datei extra.mm (Klassenname Extra) aufzurufen, diese statische Klassenmethode einzufügen und dann andere statische Klassenmethoden hinzuzufügen, wenn die Situation eintrifft wo es nur Sinn macht, es in C ++ zu tun, weil es in einigen Fällen weniger mühsam ist. (Es gibt Fälle, in denen ObjC etwas mit weniger Codezeilen ausführt, und einige Fälle, in denen C ++ dies mit weniger Codezeilen tut.)
PS Eine weitere Möglichkeit besteht darin, eine .mm-Datei zu verwenden, aber einen Objective C-Wrapper für die Verwendung von std :: string und std :: regex_replace () (oder regex_match ()) zu erstellen.
quelle