我花了好几个小时试图弄明白这一点没有运气。 我有一个字符串,称之为 FileContent ,它保存了我需要修改的UTF-8编码文件的内容。
此 FileContent 有一个特定的部分,其中包含一个我需要查找,替换然后用其覆盖原始文件的变量。我知道如何在找到它后替换该部分,然后覆盖原始文件,但我很难找到具有变量本身的部分。
变量由随机数和随机长度的字母组成,以唯一标识单个用户的会话。
这是变量出现在读入 FileContent 的文件部分中的方式:
+option1 (variable) +option2
周围文本(+ option1和+ option2)和空格是不变的,便于手动定位。此部分是较长行的一部分,必须保持不变。
我尝试过NSRegularExpression:regularExpressionWithPattern:使用各种通配符,使用\来转义" +",但它总是返回:
值“+ option1 ... + option2”无效。
我尝试了documentation中的所有通配符以及它们在其他已回答的问题中找到的各种组合,例如。
".*\+option1 (.*) \+option2.*".
NSRegularExpression不适合此任务吗? 我应该使用NSRange还是NSScanner,也许是完全不同的东西?
答案 0 :(得分:0)
正如John Elemans所提到的,如果+ option1和+ option2是固定的并且是UNIQUE,你可以简单地使用rangeOfString来做到这一点。首先,您需要找到两者的索引:
// FileContent now holds ".... +option1 yourString +option2 ...."
int idx1 = [FileContent rangeOfString:@"+option1"].location;
int idx2 = [FileContent rangeOfString:@"+option2"].location;
int len2 = [@"+option2" length];
if ((idx1>=0)&&(idx2>=0)) {
NSString *str= [FileContent substringWithRange:NSMakeRange(idx1, idx2+len2-idx1)];
// now str holds "+option1 yourString +option2"
// split this into array
NSArray *arr = [str componentsSeparatedByString:@" "];
// now array arr has [+option1,yourString,+option2]
// So you can get your string by arr[1];
NSLog(@"MyString %@",arr[1]);
}
请注意,如果更改了选项1和2名称或者无论如何都更改了他们的订单,这将会中断。另请注意,我还没有测试过此代码。它可能会在nsmakerange区域中断...请正确检查索引/长度。