替换包含目标C中的变量的字符串的特定部分

时间:2017-08-20 20:34:11

标签: objective-c string variables find nsregularexpression

我花了好几个小时试图弄明白这一点没有运气。 我有一个字符串,称之为 FileContent ,它保存了我需要修改的UTF-8编码文件的内容。

FileContent 有一个特定的部分,其中包含一个我需要查找,替换然后用其覆盖原始文件的变量。我知道如何在找到它后替换该部分,然后覆盖原始文件,但我很难找到具有变量本身的部分。

变量由随机数和随机长度的字母组成,以唯一标识单个用户的会话。

这是变量出现在读入 FileContent 的文件部分中的方式:

+option1 (variable) +option2

周围文本(+ option1和+ option2)和空格是不变的,便于手动定位。此部分是较长行的一部分,必须保持不变。

我尝试过NSRegularExpression:regularExpressionWithPattern:使用各种通配符,使用\来转义" +",但它总是返回:

  

值“+ option1 ... + option2”无效。

我尝试了documentation中的所有通配符以及它们在其他已回答的问题中找到的各种组合,例如。

".*\+option1 (.*) \+option2.*". 

NSRegularExpression不适合此任务吗? 我应该使用NSRange还是NSScanner,也许是完全不同的东西?

1 个答案:

答案 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区域中断...请正确检查索引/长度。