CoreData NSPredicate 匹配正则表达式

CoreData NSPredicate MATCHES regex

我有一个 CoreData table,它有一个字段,其中包含一串由逗号分隔的数字。我希望能够 运行 使用与给定特定数字匹配的谓词进行提取。

例如,如果 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(或正则表达式)格式化的一些愚蠢的东西,但我尝试了很多变体,我希望好心的人读到这篇文章能让我摆脱痛苦:)

免责声明:我没有使用过 Objective C。这个答案是基于我的正则表达式知识和 some documentation.

MATCHES The left hand expression equals the right hand expression using a regex-style comparison according to ICU v3 (for more details see the ICU User Guide for Regular Expressions).

这听起来像 Java 使用方法 "matches" 的方式,在这种情况下“^2|,2,|,2”永远无法匹配整个字符串。这与总是搜索文本的正则表达式不同。您需要的正则表达式更像是

.*\b2\b.*

(^$ 假定为 Java)。另一种选择是拆分字符串。