NSPredicate上的正则表达式匹配失败

时间:2014-03-01 09:21:18

标签: ios objective-c regex escaping nspredicate

我使用此NSPredicate执行抓取:

NSPredicate *sameNameAndNumber = [NSPredicate predicateWithFormat:@"name LIKE %@ AND number LIKE %@", field1, field2];

我得到一个例外:

2014-03-01 01:02:03.214 Memories [44692:3d03] * 由于未捕获的异常'NSInternalInconsistencyException'而终止app,原因:'无法进行正则表达式匹配,原因:可以打开模式U_REGEX_MISMATCHED_PAREN(字符串べきだ[べきだ],模式まみれ(涂れ)[まにれ],案例0,佳能0)'

看起来它是由字符串“まみれ(涂れ)[まにれ]”特别引起的。无论与其进行比较的其他字符串如何,我都会得到上述异常。

如果我将上述代码中的LIKE替换为==,我就没有这个问题。使用LIKE导致它将我的测试视为正则表达式吗?它不会逃避我的字符串中的括号和括号吗?我如何忽略查询中的括号和括号?

1 个答案:

答案 0 :(得分:1)

您应该使用[NSPredicate predicateWithFormat:@"name Contains %@ AND number Contains %@", field1, field2],即使用"Contains"替换"Like"中的Predicate

如果您在"Like"句中使用Predicate,以防field1等于"(" - 中文左括号,您的应用程序崩溃。然后使用"CONTAINS"替换"LIKE"