【问题标题】:matchesInString function returning an empty Array in Swift在 Swift 中,matchesInString 函数返回一个空数组
【发布时间】:2014-06-21 18:40:32
【问题描述】:

我有这段代码在 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 返回NSTextCheckingResultArray,但我注意到在Objective-C 代码(有效)中Array 包含NSSimpleRegularExpressionCheckingResult 对象而不是NSTextCheckingResult对象。 Swift 版本中报告的空 Array 报告了零个 NSTextCheckingResult 对象

知道这里缺少什么吗?

【问题讨论】:

    标签: regex swift


    【解决方案1】:

    更新,这对我有用:

    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
    

    我会为此提交一个错误。

    【讨论】:

    • 感谢您的回复...它现在可以工作了...看来 Swift 仍在不断发展,我们所说的一切都在微调
    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 2017-03-29
    • 2019-04-23
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    相关资源
    最近更新 更多