【发布时间】:2020-05-16 21:10:23
【问题描述】:
我有一个 CoreData 表,其中一个字段包含一系列用逗号分隔的数字字符串。我希望能够使用与给定特定数字匹配的谓词运行提取。
例如,如果 fieldName = "12,52,66,89,2,8"
我想搜索 2,那么它应该匹配字符串中倒数第二个数字并将该记录包含在结果中。
使用正则表达式: ^2|,2,|,2 我发现它在我的测试用例中工作得令人满意,例如使用此站点对其进行测试:https://www.regexpal.com/
但是,当我将它传递给 NSFetchRequest 的 NSPredicate 时,我无法让它匹配
NSNumber *val = @2;
NSString *regex = [NSString stringWithFormat:@"^%@|,%@,|,%@", val, val, val];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"fieldName MATCHES %@", regex];
用 CONTAINS val 替换 MATCHES 可以使其工作,但当然它也会错误地匹配任何出现的数字。
我怀疑我在格式化 CoreData(或正则表达式)时遗漏了一些愚蠢的东西,但我尝试了很多变体,我希望善良的灵魂阅读这篇文章会让我摆脱痛苦:)
【问题讨论】:
-
在
"12,52,66,89,2,8",你只匹配,2,你的正则表达式需要匹配整个字符串。否则,它在搜索中返回不匹配。 -
感谢@Larme,现在已解决,请参阅下面接受的答案中的我的 cmets。最后我遇到了两个错误 - 1. 认为任何匹配都会算作 fetchrequest 谓词的匹配,以及 2. 没有转义转义字符。
标签: objective-c regex core-data nspredicate