Expresiones regulares y editores de texto (III)

  2 mins read

Seguimos con nuestra particular cruzada sobre las expresiones regulares. Esta vez veremos un pequeño ejemplo para usarlas con RegexKitLite para iOS.

Incluyendo RegexKitLite en nuestro proyecto

Lo primero que haremos es descargar de la página oficial de RegexKitLite su última versión estable.
Al descargarlo y descomprimirlo veremos un .h y un .m, los copiamos a nuestro proyecto.
Incluiremos la librería dinámica “libicucore.dylib” a nuestro target, para despistados, mostramos las propiedades de nuestro target, seleccionamos build phases y en la pestaña “link binary with libraries” añadimos la librería mencionada.

Usando regex con RegexKitLite

En este punto ya tenemos añadido RegexKitLite a nuestro proyecto, para empezar a usarlo importaremos la cabecera RegexKitLite.h donde queramos usarlo.

#import "RegexKitLite.h"

Os propongo dos ejemplos para que veáis el potencial de las regex en código.
Nuestro primer ejemplo será la de sustituir todas las ocurrencias de un NSString en otro mediante una regex. Imaginemos que tenemos en un NSString una lista de canciones de un álbum de música, algo con el siguiente formato:

01. Feeling This
02. Obvious
03. I Miss You
04. Violence
05. Stockholm Syndrome
06. Down
07. The Fallen Interlude
08. Go
09. Asthenia
10. Always
11. Easy Target
12. All Of This
13. Here’s Your Letter
14. I’m Lost Without You

Si generamos la regex, (d+).s*([^n]*) Podremos mediante código sacar el nº y título de cada canción. En este código veremos como los almacenamos en un NSDictionary siendo la key el nº de canción y el valor el nombre:

NSString *strAll = @"01.	Feeling Thisn02.	Obviousn03.	I Miss Youn04.	Violencen05.	Stockholm Syndromen06.	Downn07.	The Fallen Interluden08.	Gon09.	Asthenian10.	Alwaysn11.	Easy Targetn12.	All Of Thisn13.	Heres Your Lettern14.	Im Lost Without You";

NSArray *arrComp = [strAll arrayOfCaptureComponentsMatchedByRegex:@"(\d+)\.\s*([^\n]*)"];

NSMutableArray *songNumbers = [[NSMutableArray alloc] init];
NSMutableArray *songTitles = [[NSMutableArray alloc] init];

for (NSArray *allMatches in arrComp) {
    
    [songNumbers addObject:[allMatches objectAtIndex:1]];
    [songTitles addObject:[allMatches objectAtIndex:2]];
     
}

NSDictionary *dictSongs = [NSDictionary dictionaryWithObjects:songTitles forKeys:songNumbers];

Esto sería lo básico para encontrar “matches” en un NSString.
El siguiente ejemplo se trata de reemplazar cierta ocurrencia de un NSString variable mediante una regex, pongamos un ejemplo, si quisiéramos reemplazar la primera canción por “”, haríamos:

NSString *result = [result stringByReplacingOccurrencesOfRegex:@"01[^\n]*" withString:@""];

De esta sencilla forma podemos usar regex en iOS con RegexKitLite.

Written by:

Christian Panadero Martinez