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

Replace a specific part of a string that includes a variable in objective C

我花了几个小时试图解决这个问题,但没有成功。 我有一个字符串,称之为 FileContent,它包含我需要修改的 UTF-8 编码文件的内容。

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

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

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

+option1 (variable) +option2

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

我试过NSRegularExpression:regularExpressionWithPattern:使用各种通配符,用\转义“+”,但总是returns:

The value “+option1 ... +option2” is invalid.

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

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

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

正如 John Elemans 所提到的,如果 +option1 和 +option2 是固定且唯一的,您可以简单地使用 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 区域中断...请正确检查 index/length。