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)。另一种选择是拆分字符串。
我有一个 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)。另一种选择是拆分字符串。