我在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
NSTextCheckingResult
,我也注意到在Objective-C代码中(有效)Array
包含{ {1}}对象,而不是NSSimpleRegularExpressionCheckingResult
个对象。 Swift版本中报告的空NSTextCheckingResult
报告了零Array
个对象
知道这里缺少什么吗?
答案 0 :(得分:4)
更新,这对我有用:
let regexOptions:NSRegularExpressionOptions?
= NSRegularExpressionOptions.CaseInsensitive
var matchingError : NSError?
let regex = NSRegularExpression(pattern: "(.*?)(<[^>]+>|\\Z)",
options: regexOptions!, error: &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
我会为此提交一个错误。