我正在尝试使用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应用程序。
答案 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
一致,但无论如何,转义一个字符不需要被转义不应该导致任何问题(或者至少它不是我对正则表达式的理解它应该。)