2016-09-08 2 views
1

Je ne peux pas sembler obtenir ce travail. Im suivant la documentation de pomme.Regex renvoie la chaîne entière iOS NSRegularExpression

je une chaîne d'échantillon comme tel:

NSString * testString = @"Server Error -4"; 

J'ai regex comme suit:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"Server\\sError\\s(-?\\d+)" options:NSRegularExpressionCaseInsensitive error:&error]; 

Quand je fais:

[testString substringWithRange:[regex rangeOfFirstMatchInString:testString options:kNilOptions range:NSMakeRange(0, testString.length)]]; 

Je reçois toute la chaîne de retour . (Par exemple, la correspondance de plage s'étend de 0 à la fin de la chaîne). Une idée de ce qui ne va pas avec mon regex?

Répondre

1

Il n'y a absolument aucun problème avec votre expression - il arrive juste que la première correspondance couvre toute la chaîne.

Il semble de la structure de votre expression que ce que vous vouliez faire est d'extraire le premier groupe capture du match:

NSTextCheckingResult *match = [regex firstMatchInString:testString 
       options:0 
       range:NSMakeRange(0, [testString length])]; 
NSRange range = [match rangeAtIndex:1]; 
NSString *errorCode = [testString substringWithRange:matchRange]; 
+0

fait [regex numberOfMatchesInString: Options de testString: 0 Plage: NSMakeRange (0 , [longueur du test])] ne renvoie que 1. Cela signifie qu'il n'y a qu'une seule correspondance. – Rafthecalf

+0

@RafaelGutierrez A droite, et c'est le match qui couvre toute la chaîne. Avez-vous essayé le code de la réponse? – dasblinkenlight

+0

Oui cela a fonctionné, Merci beaucoup @dasblinkenlight – Rafthecalf