Google inicial indica que no hay una forma integrada de hacer expresiones regulares en una aplicación Objective-C Cocoa.
Entonces cuatro preguntas:
¿Es eso realmente cierto?
¿Me estás tomando el pelo?
Ok, ¿hay una buena biblioteca de código abierto que recomiendas?
¿Cuáles son las formas de acercarse lo suficiente sin importar una biblioteca, tal vez con la clase NSScanner?
objective-c
regex
cocoa
dreeves
fuente
fuente
Respuestas:
Noté que a partir de iOS 4.0 Apple proporciona una clase NSRegularExpression . Además, a partir de 10,7, la clase está disponible en OS X .
fuente
RegExKitLite, por ejemplo, no requiere ninguna biblioteca, solo agregue .my .h a su proyecto.
(Mi queja contra RegExKitLite es que extiende NSString a través de la categoría, pero también puede considerarse como una característica. También utiliza las bibliotecas de ICU no públicas que se envían con el sistema operativo, lo cual no es recomendado por Apple).
fuente
[myString rangeOfString:@"regex_here" options:NSRegularExpressionSearch]
RegexKit es el mejor que he encontrado hasta ahora. Muy cacao: y. Estoy usando la versión "Lite" en varias de nuestras aplicaciones para iPhone:
sourceforge
lingonikorg
fuente
Puede usar la biblioteca de expresiones regulares POSIX (Yay para un sistema operativo compatible con POSIX). Tratar
fuente
La solución de pirateo barata y sucia que uso para resolver los problemas de análisis de REGEX y JSON es crear un objeto UIWebView e inyectar funciones de Javascript para realizar el análisis. La función de JavaScript luego devuelve una cadena del valor (o lista de valores) que me interesa. De hecho, puede almacenar un pequeño conjunto de funciones de biblioteca personalizadas para tareas particulares y luego simplemente llamarlas según sea necesario.
No sé si esta técnica escala a grandes volúmenes de solicitudes de análisis repetidas, pero para cosas transaccionales rápidas hace el trabajo sin depender de ningún recurso externo adicional o código que quizás no entiendas.
fuente
Me gusta el marco AGRegex que usa PCRE, útil si está acostumbrado a la sintaxis PCRE. La mejor versión de este marco es la del cliente Colloquy IRC, ya que se ha actualizado para usar PCRE 6.7:
http://colloquy.info/project/browser/trunk/Frameworks/AGRegex
Es muy liviano, mucho más que RegExKit (aunque, por supuesto, no es tan capaz).
fuente
NSRegularExpression
está disponible desde Mac OS X v10.7 e IOS 4.0.fuente
Durante mi búsqueda sobre este tema, me encontré con CocoaOniguruma que usa Oniguruma , el motor de Expresión Regular detrás de Ruby1.9 y PHP5. Parece un poco más nuevo en comparación con el OregonKit existente (en japonés). No estoy seguro de cómo se comparan con otros enlaces.
fuente
Buscando un poco en Google, encontré esta biblioteca: RegexOnNSString
Biblioteca de código abierto, que contiene funciones como:
y usando
NSRegularExpression
clase. Muy fácil de usar y sin necesidad de preocuparse por nada.Tenga en cuenta que
NSRegularExpression
está disponible desde Mac OS X v10.7 e IOS 4.0, como mencionó Datasmid.fuente
Yo te lo pongo fácil. Agrego un nuevo archivo C ++ a mi proyecto Objective C, lo renombro como .mm y luego creo una clase C ++ estándar dentro. Luego, hago un método de clase estática en la sección "public:" para una función C ++ que toma un NSString y devuelve un NSString (o NSArray, si eso es lo que quieres). Luego convierto NSString a C ++ std :: string así:
A partir de ahí, puedo usar regex_replace así:
Entonces, puedo convertir ese std :: string nuevamente en un NSString con:
Si solo está usando este C ++ solo para esta función, puede que le resulte adecuado llamar a este archivo extra.mm (nombre de clase Extra) y poner este método de clase estática, y luego agregar otros métodos de clase estática cuando llegue la situación donde tiene sentido hacerlo en C ++ porque es menos complicado en algunos casos. (Hay casos donde ObjC hace algo con menos líneas de código, y algunos casos donde C ++ lo hace con menos líneas de código).
PD Aún otra forma de hacerlo es usar un archivo .mm pero hacer un contenedor de Objective C alrededor del uso de std :: string y std :: regex_replace () (o regex_match ()).
fuente