Recibí una cadena como 'stackoverflow.html' y en la expresión regular 'stack (. ) .html' Me gustaría tener el valor en (.).¿Cómo obtener coincidencias en iOS usando expresiones regulares?
sólo pude encontrar NSPredicate como:
NSString *string = @"stackoverflow.html";
NSString *expression = @"stack(.*).html";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", expression];
BOOL match = [predicate evaluateWithObject:string]
Pero eso sólo dice que tengo un partido y no devuelve una cadena, cuando uso NSRegularExpression:
NSRange range = [string rangeOfString:expression options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location == NSNotFound) return nil;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location, range.length}]);
me dará la secuencia de regreso total, stackoverflow.html, pero solo estoy interesado en eso que está en (. *). Quiero recuperar el "exceso". En PHP esto fue fácil de hacer, pero ¿cómo se puede lograr esto en xCode para iOS?
Lógicamente si me gustaría hacer esto:
NSInteger firstPartLength = 5;
NSInteger secondPartLength = 5;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location + firstPartLength, range.length - (firstPartLength + secondPartLength)}]
Me da el resultado propert 'desbordamiento'. Pero el problema es que en muchos casos no sé la duración de la primera parte o la segunda parte. Entonces, ¿hay alguna manera de obtener el valor que debería estar en (. *)?
¿O debo decidir elegir el método más feo encontrando la ubicación de (.) y calcular la primera y la segunda parte a partir de ahí? Pero en la expresión regular también puede tener ([a-z]) pero luego la forma fea de usar otra expresión regular para obtener la ubicación de los valores entre() y luego usar eso para calcular la parte izquierda y derecha. ¿Y qué pasa si tengo más? como 'A (.) debería encontrar la respuesta a (. *).' Me gustaría tener una matriz como resultado con valores [0] el valor después de A y [1] el valor después de para.
Espero que mi pregunta sea clara.
Gracias de antemano,
creo NSRegularExpression más útil – SAKrisT
En comparación con Perl o Ruby o muchos otros idiomas, NSRegularExpression es potente, pero en los casos más comunes utiliza un párrafo que hacer una oración vale la pena de trabajo. Me gusta cómo este ejemplo de biblioteca puede permitirle emparejar una expresión y capturar un grupo en una línea razonable. –