La recherche initiale sur Google indique qu'il n'existe aucun moyen intégré de créer des expressions régulières dans une application Objective-C Cocoa.
Donc quatre questions:
Est-ce vraiment vrai?
Vous plaisantez j'espère?
Ok, alors y a-t-il une belle bibliothèque open-source que vous recommandez?
Quels sont les moyens de se rapprocher suffisamment sans importer de bibliothèque, peut-être avec la classe NSScanner?
objective-c
regex
cocoa
dreeves
la source
la source
Réponses:
J'ai remarqué qu'à partir d'iOS 4.0, Apple fournit une classe NSRegularExpression . De plus, à partir de 10.7, la classe est disponible sous OS X .
la source
RegExKitLite par exemple ne nécessite aucune bibliothèque, ajoutez simplement le .m et .h à votre projet.
(Ma plainte contre RegExKitLite est qu'il étend NSString via la catégorie, mais il peut également être considéré comme une fonctionnalité. Il utilise également les bibliothèques ICU non publiques fournies avec le système d'exploitation, ce qui n'est pas recommandé par Apple.)
la source
[myString rangeOfString:@"regex_here" options:NSRegularExpressionSearch]
RegexKit est le meilleur que j'ai trouvé à ce jour. Très cacao: y. J'utilise la version "Lite" dans plusieurs de nos applications iPhone:
sourceforge
lingonikorg
la source
Vous pouvez utiliser la bibliothèque d'expressions régulières POSIX (Yay pour un système d'exploitation compatible POSIX). Essayer
la source
La solution de piratage bon marché et sale que j'utilise pour résoudre les problèmes d'analyse REGEX et JSON consiste à créer un objet UIWebView et à injecter des fonctions Javascript pour effectuer l'analyse. La fonction javascript renvoie ensuite une chaîne de la valeur (ou liste de valeurs) qui me tient à cœur. En fait, vous pouvez stocker une petite bibliothèque de fonctions personnalisées pour des tâches particulières, puis les appeler selon vos besoins.
Je ne sais pas si cette technique s'adapte à d'énormes volumes de demandes d'analyse répétées, mais pour les transactions rapides, elle fait le travail sans dépendre de ressources externes supplémentaires ou de code que vous ne comprenez peut-être pas.
la source
J'aime le framework AGRegex qui utilise PCRE, pratique si vous êtes habitué à la syntaxe PCRE. La meilleure version de ce framework est celle du client Colloquy IRC car il a été mis à niveau pour utiliser PCRE 6.7:
http://colloquy.info/project/browser/trunk/Frameworks/AGRegex
Il est très léger, bien plus que RegExKit (bien que pas aussi capable bien sûr).
la source
NSRegularExpression
est disponible depuis Mac OS X v10.7 et IOS 4.0.la source
Au cours de ma recherche sur ce sujet, je suis tombé sur CocoaOniguruma qui utilise Oniguruma , le moteur d'expression régulière derrière Ruby1.9 et PHP5. Il semble un peu plus récent par rapport à l' OregKit existant (en japonais). Je ne sais pas comment ceux-ci se comparent aux autres liaisons.
la source
Googler un peu, j'ai trouvé cette bibliothèque: RegexOnNSString
Bibliothèque open source, contenant des fonctions telles que:
et en utilisant la
NSRegularExpression
classe. Très facile à utiliser et pas besoin de s'inquiéter de quoi que ce soit.Veuillez noter que
NSRegularExpression
c'est disponible depuis Mac OS X v10.7 et IOS 4.0, comme l'a mentionné Datasmid.la source
Je vous facilite la tâche. J'ajoute un nouveau fichier C ++ à mon projet Objective C, le renomme en .mm, puis crée une classe C ++ standard à l'intérieur. Ensuite, je crée une méthode de classe statique dans la section "public:" pour une fonction C ++ qui prend une NSString et renvoie une NSString (ou NSArray, si c'est ce que vous voulez). Je convertis ensuite NSString en C ++ std :: string comme ceci:
À partir de là, je peux utiliser regex_replace comme ceci:
Ensuite, je peux reconvertir cette std :: string en une NSString avec:
Si vous n'utilisez ce C ++ que pour cette fonction, vous trouverez peut-être approprié d'appeler ce fichier extra.mm (nom de classe Extra) et de placer cette méthode de classe statique, puis d'ajouter d'autres méthodes de classe statique lorsque la situation se présente où il est logique de le faire en C ++ car c'est moins compliqué dans certains cas. (Il y a des cas où ObjC fait quelque chose avec moins de lignes de code, et certains cas où C ++ le fait avec moins de lignes de code.)
PS Encore une autre façon avec ceci est d'utiliser un fichier .mm mais de créer un wrapper Objective C autour de l'utilisation de std :: string et std :: regex_replace () (ou regex_match ()).
la source