matchesInString函数在Swift中返回一个空数组

时间:2014-06-21 18:40:33

标签: regex 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 NSTextCheckingResult,我也注意到在Objective-C代码中(有效)Array包含{ {1}}对象,而不是NSSimpleRegularExpressionCheckingResult个对象。 Swift版本中报告的空NSTextCheckingResult报告了零Array个对象

知道这里缺少什么吗?

1 个答案:

答案 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

我会为此提交一个错误。