NSRegularExpression上的Cocoa错误2048

时间:2014-02-05 01:38:11

标签: objective-c regex nsregularexpression

我正在尝试使用NSRegularExpression在pbxproj中搜索字符串(在.xcodeproj文件夹内)。

我正在“Begin PBXBuildFile section”区域

中搜索编译器标志
NSString* findFlagsRegex = @"([A-Z0-9]{24}\\s\\/\\*\\s[A-Za-z\\.\\s0-9]+\\*\\/\\s=\\s{isa\\s\\=\\s[A-Za-z]*;\\s?fileRef\\s\\=\\s[A-Z0-9]*\\s\\/\\*\\s[A-Za-z0-9\\s\\.]*\\*\\/;\\ssettings\\s\\=\\s{[A-Za-z0-9_\\s\\=\"-]*;\\s\\};\\s};)";
NSRegularExpression* expression3 = [NSRegularExpression regularExpressionWithPattern:findFlagsRegex options:kNilOptions error:&err];
NSLog(@"Error: %@",[err description]);

Error Domain=NSCocoaErrorDomain Code=2048 "The value “([A-Z0-9]{24}\s\/\*\s[A-Za-z\.\s0-9]+\*\/\s=\s{isa\s\=\s[A-Za-z]*;\s?fileRef\s\=\s[A-Z0-9]*\s\/\*\s[A-Za-z0-9\s\.]*\*\/;\ssettings\s\=\s{[A-Za-z0-9_\s\="-]*;\s\};\s};)” is invalid." UserInfo=0x61800026a7c0 {NSInvalidValue=([A-Z0-9]{24}\s\/\*\s[A-Za-z\.\s0-9]+\*\/\s=\s{isa\s\=\s[A-Za-z]*;\s?fileRef\s\=\s[A-Z0-9]*\s\/\*\s[A-Za-z0-9\s\.]*\*\/;\ssettings\s\=\s{[A-Za-z0-9_\s\="-]*;\s\};\s};)}

我复制:

  ([A-Z0-9]{24}\s\/\*\s[A-Za-z\.\s0-9]+\*\/\s=\s{isa\s\=\s[A-Za-z]*;\s?fileRef\s\=\s[A-Z0-9]*\s\/\*\s[A-Za-z0-9\s\.]*\*\/;\ssettings\s\=\s{[A-Za-z0-9_\s\="-]*;\s\};\s};)

上面的正则表达式在RegexPal中工作,直接从同一测试数据上的错误消息中的无效值复制...所以我不确定是什么问题:/

不确定这是否会添加任何内容,但这是Mac应用程序,而不是iOS应用程序。

1 个答案:

答案 0 :(得分:2)

您的模式包含一个单独的文字}。我相信你的意思是有两个文字{和两个文字} - 这是你问题中模式的略微修改版本,还插入了三个\\ s转义当前未在代码中转义的花括号。

NSString* findFlagsRegex = @"([A-Z0-9]{24}\\s\\/\\*\\s[A-Za-z\\.\\s0-9]+\\*\\/\\s=\\s\\{isa\\s\\=\\s[A-Za-z]*;\\s?fileRef\\s\\=\\s[A-Z0-9]*\\s\\/\\*\\s[A-Za-z0-9\\s\\.]*\\*\\/;\\ssettings\\s\\=\\s\\{[A-Za-z0-9_\\s\\=\"-]*;\\s\\};\\s\\};)";

我不确定该错误是否与RegexPal有关,或者RegexPal是否依赖于您的浏览器使用的JS副本,或者该错误是否与NSRegularExpression一致,但无论如何,转义一个字符不需要被转义不应该导致任何问题(或者至少它不是我对正则表达式的理解它应该。)