#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 все еще развивается, и пока мы говорим, все хорошо настроено