Функция matchesInString, возвращающая пустой массив в Swift

#regex #swift

#регулярное выражение #swift

Вопрос:

У меня есть этот код, работающий в Objective-C

 NSRegularExpression* regex = [[NSRegularExpression alloc] initWithPattern:@"(.*?)(<[^>] >|\Z)" options:NSRegularExpressionCaseInsensitive|NSRegularExpressionDotMatchesLineSeparators error:nil];
NSArray* results = [regex matchesInString:text options:NSMatchingReportProgress range:NSMakeRange(0, text.length)];
  

Но версия Swift не работает. Возвращает matchesInString пустой Array (используя один и тот же текст с тегами в обоих случаях)

 let regexOptions = NSRegularExpressionOptions.CaseInsensitive | NSRegularExpressionOptions.DotMatchesLineSeparators
let regex = NSRegularExpression.regularExpressionWithPattern("(.*?)(<[^>] >|\Z)", options: regexOptions, error: nil)
var results = regex.matchesInString(markupText, options: nil, range: NSMakeRange(0, countElements(markupText))) as Array<NSTextCheckingResult>
  

Несмотря на то, что в документации указано, что matchesInString возвращает Array значение of NSTextCheckingResult , я отметил, что в коде Objective-C (который работает) Array содержит NSSimpleRegularExpressionCheckingResult объекты, а не NSTextCheckingResult объекты. Пустой Array , о котором сообщается в версии Swift, сообщает о нулевых NSTextCheckingResult объектах, хотя

Есть идеи о том, чего здесь не хватает?

Ответ №1:

Обновление, это работает для меня:

 let regexOptions:NSRegularExpressionOptions?
    = NSRegularExpressionOptions.CaseInsensitive

var matchingError : NSError?
let regex = NSRegularExpression(pattern: "(.*?)(<[^>] >|\Z)",
    options: regexOptions!, error: amp;matchingError)

let markupText = "<html></html>"

let results = regex.matchesInString(markupText, options: nil,
    range: NSMakeRange(0, countElements(markupText))) as Array<NSTextCheckingResult>
  

Я не уверен, почему RegexOptions должен быть необязательным. Может быть ошибка в компиляторе.

Старые мысли

Это может быть ошибкой в Xcode6b2. Я упростил ваш пример до одной строки:

 let regexOptions = NSRegularExpressionOptions.CaseInsensitive
  

И я получаю эту ошибку:

 fatal error: Can't unwrap Optional.None
  

Я бы написал об ошибке для этого.

Комментарии:

1. Спасибо за ответ… Теперь это работает… Кажется, что Swift все еще развивается, и пока мы говорим, все хорошо настроено