【问题标题】:Cocoa error 2048 when using NSRegularExpression in Cocoa在 Cocoa 中使用 NSRegularExpression 时出现 Cocoa 错误 2048
【发布时间】:2014-01-05 13:58:40
【问题描述】:

我正在构建一个用于 iOS 应用程序解析器的正则表达式。这是我的代码:

NSRegularExpression *regex =
[NSRegularExpression regularExpressionWithPattern:@"(?<=#EXT[^\r\n]*[\r\n]+)[^#][^\r\n]+"
                                          options:NSRegularExpressionAnchorsMatchLines
                                            error:&regexError
 ];
if (regexError) {
    NSLog(@"regexError: %@", regexError);
    return nil;
}

来自this answer

这给出了这个错误:

regexError: Error Domain=NSCocoaErrorDomain Code=2048 "The operation couldn’t be completed. (Cocoa error 2048.)" UserInfo=0x8e86670 {NSInvalidValue=(?&lt;=#EXT[^

Cocoa 错误 2048 是 NSFormattingErrorMinimum according to the docs... 但实际上没有进一步的解释。

这是什么意思?

【问题讨论】:

    标签: ios regex cocoa nsregularexpression


    【解决方案1】:

    您是否要匹配新的换行符/换行符?你已经在你的正则表达式中插入了一个文字换行符......你需要插入换行符的代码。尝试转义为\\n 等。

    编辑:

    您必须转义 所有 特殊字符串。例如,您希望您的正则表达式字符串包含\+r,而不是换行符。所以你需要使用\\r 而不是\r

    "(?<=#EXT[^\\r\\n]*[\\r\\n]+)[^#][^\\r\\n]+"
    

    编辑 2:

    您的后视中不能有无限长度的字符串。因此,不允许使用 *+。这是根据ICU regex reference。 (NSRegularExpression 使用 ICU 正则表达式语法。)

    【讨论】:

    • 是的,我正在尝试匹配换行符。我试过这个:@"(?&lt;=#EXT[^\r\\n]*[\r\\n]+)[^#][^\r\\n]+" 但我得到了同样的错误。
    • 您必须转义所有特殊字符,现在只需 \n。我更新了我的答案。
    • 原来你的后视是无效的。无需后顾之忧。
    • 我试过这个:#EXT[^\\r\\n]*[\\r\\n]+[^#][^\\r\\n]+。错误消失了,但现在它与我的字符串不匹配..
    • 好吧,我回答了错误问题 :) 现在您需要调试您的正则表达式。我使用雷吉:macupdate.com/app/mac/24078/reggy
    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多