Quand je lance le code suivant dans un terrain de jeu, je reçois une plage non valide en raison:NSRegularExpression Retourne plage non valide
import Cocoa
var error: NSError?
var captureGroups: [String] = []
var input = "http://www.google.com"
var pattern = "(https?|ftp|file|gopher|mailto|news|nntp|telnet|wais)://[[email protected]]+([.:][[email protected]]+)*/?[a-zA-Z0-9_?,%#~&/\\-]+([:.][a-zA-Z0-9_?,%#~&/\\-]+)*"
var internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error)!
if let match = internalExpression.firstMatchInString(input, options: nil, range: NSMakeRange(0, count(input))) {
match.numberOfRanges // 4
match.rangeAtIndex(0) // (0, 21)
match.rangeAtIndex(1) // (0, 4)
match.rangeAtIndex(2) // (17, 3)
match.rangeAtIndex(3) // (9223372036854775807,0)
}
Ce code a travaillé pour d'autres expressions régulières, il semble que celui-ci que c'est lui donner des problèmes. Je ne suis pas un expert RegEx, donc je ne sais pas comment je devrais procéder.
fonctionne ici https://regex101.com/r/nK7oK0/2 –
9223372036854775807 est NSIntegerMax aka NSNotFound, c'est-à-dire qu'il n'y a pas de correspondance pour le dernier groupe de capture. Quel résultat attendez-vous? –
@MartinR Je m'attendais à ce que le match échoue, mais je ne suis pas un expert RegEx. Existe-t-il une méthode préférée pour tester ce cas? Je suis relativement nouveau à Cocoa aussi bien. – user3338852