Regex 使用与单词开头匹配的字符串进行预测

Regex 使用与单词开头匹配的字符串进行预测,regex,core-data,nspredicate,foundation,Regex,Core Data,Nspredicate,Foundation,这一定是复制品。但是有这么多的预测问题,我找不到合适的 我有一个包含compositeName字段的核心数据对象列表。里面可能有“艾米丽·布朗特”这样的名字。我想使用一个NSPredicate搜索列表,这将允许我搜索“Em”和“Bl”,然后在获取的结果中显示此名称 这一定非常容易,但正如你猜的,我没看到。我尝试使用正则表达式创建NSPredicate时出现功能异常,如下所示: [NSPredicate predicateWithFormat:@"compositeName MATCHES[cd]

这一定是复制品。但是有这么多的预测问题,我找不到合适的

我有一个包含
compositeName
字段的核心数据对象列表。里面可能有“艾米丽·布朗特”这样的名字。我想使用一个
NSPredicate
搜索列表,这将允许我搜索“Em”和“Bl”,然后在获取的结果中显示此名称

这一定非常容易,但正如你猜的,我没看到。我尝试使用正则表达式创建NSPredicate时出现功能异常,如下所示:

[NSPredicate predicateWithFormat:@"compositeName MATCHES[cd] '.*(?<=^|\\s)%@.*'", query];

[NSPredicate predicateWithFormat:@“compositeName匹配[cd]”。*(?您需要在谓词字符串之外构建整个正则表达式模式字符串,然后将其传递给谓词

此外,还有一个正则表达式构造
\b
来匹配单词边界,这正是您所追求的

总之,这段代码应该为您的问题提供一个简单的解决方案:

NSString *searchString = @"Em";
NSString *regexString  = [NSString stringWithFormat:@".*\\b%@.*", searchString];

NSPredicate *pred = [NSPredicate predicateWithFormat:@"self.compositeName matches[cd] %@", regexString];
如果输入的搜索文本没有被清除,那么在将其传递给正则表达式引擎之前,您可能需要这样做

另一个改进是在单词边界接受unicode字符,允许人们搜索“Ántonio”、“Über”和其他类似字符串

以下代码行将创建一个正则表达式模式,该模式将兼顾这两个方面:

NSString *orgSearchString = @"^";

NSString *escapedSearchString = [NSRegularExpression escapedPatternForString: orgSearchString];

NSString *regexString  = [NSString stringWithFormat:@"(?w:).*\\b%@.*", escapedSearchString];
可能重复的