gpt4 book ai didi

objective-c - 将属性字符串中的正则表达式匹配替换为 Objective-C 中的图像

转载 作者:行者123 更新时间:2023-12-01 21:59:48 24 4
gpt4 key购买 nike

我的目标是在 Parse.com 中存储属性字符串的信息。我决定为我的图像提出一种属性文本编码,该编码通过将大括号中的任何字符串 {X} 替换为相应的图像来实现。例如:

Picture of 2 colorless mana: {X}

应该生成一个属性字符串,其中 {X} 被图像替换。这是我尝试过的:

NSString *formattedText = @"This will cost {2}{PW}{PW} to cast.";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=\\{)[^}]+(?=\\})" options:NSRegularExpressionAnchorsMatchLines
error:nil];
NSArray *matches = [regex matchesInString:formattedText
options:kNilOptions
range:NSMakeRange(0, formattedText.length)];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:formattedText];
for (NSTextCheckingResult *result in matches)
{
NSString *match = [formattedText substringWithRange:result.range];
NSTextAttachment *imageAttachment = [NSTextAttachment new];
imageAttachment.image = [UIImage imageNamed:[NSString stringWithFormat:@"Mana%@.png", match]];
NSAttributedString *replacementForTemplate = [NSAttributedString attributedStringWithAttachment:imageAttachment];
[attributedString replaceCharactersInRange:result.range
withAttributedString:replacementForTemplate];
}
[_textView setAttributedText:attributedString];

目前这种方法有两个问题:

  • 大括号不会被替换,只会替换大括号内的文本。
  • 每次匹配的范围都会发生变化,因为字符串本身正在发生变化,并且每次替换原始文本长度 > 1 时都会获得更多效果。如下所示:

an image

最佳答案

两个问题:

支架未更换。那是因为您使用的是断言,这些断言不计入匹配的一部分。您与模式进行的匹配仅包含大括号内的内容。请改用此模式:

\{([^}]+)\}

即:匹配一个大括号,后跟一个或多个捕获组中不是右大括号的内容,然后是右大括号。现在整场比赛都包括了括号。

但这引入了另一个问题 - 您正在使用封闭的位来选择替换图像。解决这个问题的小改动是:内部捕获组现在保存该信息,而不是整个组。捕获组的长度告诉您所需的子字符串的范围。

NSUInteger lengthOfManaName = [result rangeAtIndex:1].length;
NSString manaName = [match substringWithRange:(NSRange){1, lengthOfManaName}];
imageAttachment.image = [UIImage imageNamed:[NSString stringWithFormat:@"Mana%@.png", manaName]];

第二个问题:字符串的长度正在变化。 Just enumerate backwards :

for (NSTextCheckingResult *result in [matches reverseObjectEnumerator])
{
//...
}

对字符串末尾范围的更改现在不会影响之前的范围。

关于objective-c - 将属性字符串中的正则表达式匹配替换为 Objective-C 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24874163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com