2010-08-28 64 views
30

我正在尋找關於如何格式化NSPredicate以在文本字符串中搜索正確單詞的解決方案。 目前我使用此代碼:如何在使用NSPredicate的字符串中查找開頭字?

NSPredicate *predicate = [NSPredicate predicateWithFormat: 
          @"(content CONTAINS[c] %@)", word]; 

,但如果這個詞是短暫的,例如,它會返回錯誤resuls: 如果字是「AIL」它會返回一個字,其中包括這3個字母的所有字符串。但我不需要這樣的抽象搜索,所以如何在字符串中搜索單詞「開始」我的單詞?

回答

56

只需使用BEGINSWITH而不是CONTAINS

編輯

如果你需要在一個字符串的每一個字進行搜索,有這是在2010年WWDC會談的一個呈現的技術的基本思想是創建一個單獨的實體Word這包含單個單詞和包含對象(您正在搜索的實體)的引用。然後,您在Word實體上執行搜索並返回與找到的單詞有關的對象。

查詢然後會是這個樣子(只要你有你的實體和Word之間的多到一的關係:「任何言語BEGINSWITH [C]%@」

這意味着,你必須設置雖然創建對象時的話。

+0

謝謝你的時間,但我只是講一個字符串,不發一言。如果我將使用開頭,它將返回所有以我的單詞開頭的字符串,但是我需要返回包含單詞的字符串,以我的單詞開始... – azia 2010-08-29 12:59:44

+0

因此,您需要的內容類似於「內容中的任何單詞以XX開頭」 ? – Alfonso 2010-08-30 06:10:08

+0

是的,這樣的。但它應該返回整個字符串。事情是我需要找到核心數據食譜與食譜標題之一的成分。例如,如果我搜索蘋果,我需要找到標題爲'Fuji Apples Tarte Tatin'的食譜。 – azia 2010-08-30 07:15:05

18

搜索先用BEGINSWITH的「富」,這會找到你的字符串

"Foo Word1 Word2", "Foo OtherWord1 OtherWord2" (will find 2) 

的開端,比CONTAINS爲「富」(不Ë美孚之前,與「富」開頭的空間),它會給你的話主持了空間

"Word1 Foo Word", "Some OtherWord FooWord", "Misc FooXWord" (will find 3) 

謂:

NSPredicate *predicate = [NSPredicate predicateWithFormat: 
          @"(content BEGINSWITH[c] %@) OR (content CONTAINS[c] %@)", word, [NSString stringWithFormat:@" %@", word]]; 
+1

這就是我想要的.. 不同的智能答案...謝謝你哥們 – guru 2016-02-16 07:28:26

6

如果您的文本包含您可以用文字之間的一些標點字符這個謂詞:

NSPredicate *predicate = [NSPredicate predicateWithFormat: 
           @"(name BEGINSWITH[c] %@) OR (name MATCHES[c] %@)", 
           query, 
           [NSString stringWithFormat:@".*[^\\w]%@.*", query]]; 
+0

哇!直到我看到這一點時,我認爲令牌化是唯一的解決方案。 – 8suhas 2015-01-09 18:38:28

+1

我已更新解決方案。現在不需要標點符號。 – 2015-01-10 21:01:26

7

我有同樣的問題,起初我以爲你的答案可以幫助我,但他們沒有。這一個幫助我,所以......請看:

NSString *matchString = [NSString stringWithFormat: @".*\\b%@.*",searchText]; 
NSString *predicateString = @"keyword MATCHES[c] %@"; 
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString]; 
0

嘗試使用化合物

NSCompoundPredicate *bPredicate =  [NSCompoundPredicate orPredicateWithSubpredicates:@[[NSPredicate predicateWithFormat:@"content BEGINSWITH[cd] %@",_SearchBar.text], [NSPredicate predicateWithFormat:@"content CONTAINS[cd] %@", _SearchBar.text]]]; 
相關問題