gpt4 book ai didi

regex - 带有匹配单词开头的字符串的 NSPredicate

转载 作者:行者123 更新时间:2023-12-05 01:08:53 31 4
gpt4 key购买 nike

这必须是重复的。但是有这么多 NSPredicate 问题,我找不到合适的问题。

我有一个包含 compositeName 的 Core Data 对象列表 field 。像“艾米莉布朗特”这样的名字可能就在那里。我想使用 NSPredicate 搜索列表这将让我搜索“Em”和“Bl”,然后在获取的结果中显示此名称。

这一定非常简单,但正如你所猜想的,我没有看到它。我对带有正则表达式的 NSPredicate 的功能失调尝试如下所示:

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

我对这个正则表达式的想法是:
  • 之前的任意数量的字符
  • 负回顾空间或开始
  • 查询
  • 之后的任意数量的字符

    但它不起作用。我没有得到任何结果。我该如何解决?

    附言如果有一个没有正则表达式的 NSPredicate 解决方案也适合我的目的。

    最佳答案

    您需要在谓词字符串之外构建整个正则表达式模式字符串,然后将其传递给谓词。

    此外,还有一个正则表达式结构 \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];

    关于regex - 带有匹配单词开头的字符串的 NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11071455/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com