2012-07-22 12 views
23

साथ मैं इस तरह एक NSPredicate है:NSPredicate सटीक मिलान स्ट्रिंग

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name CONTAINS %@", myString]; 

लेकिन वह जो कुछ भी है कि स्ट्रिंग वापस आ जाएगी। उदाहरण के लिए: अगर मेरे entity.name की जहां:

text 
texttwo 
textthree 
randomtext 

और myStringtext तो था उन तार से मेल नहीं खाता होगा। मुझे यह पसंद है कि अगर myStringtext है तो यह केवल text नाम से पहली वस्तु को वापस कर देगा और myStringrandomtext था तो यह randomtext नाम के साथ चौथी वस्तु वापस कर देगा। मैं भी यह मामला होने के लिए असंवेदनशील रहा हूँ और यह खाली स्थान के पर ध्यान नहीं देता कि

उत्तर

54

यह करना चाहिए:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name LIKE[c] %@", myString]; 

LIKE मैचों के साथ तार? और * वाइल्डकार्ड के रूप में। [c] इंगित करता है कि तुलना केस असंवेदनशील होनी चाहिए।

यदि आप नहीं चाहते हैं? और * वाइल्डकार्ड के रूप में इलाज किया जाना है, तो आप LIKE के बजाय == उपयोग कर सकते हैं: NSPredicate विधेय प्रारूप स्ट्रिंग सिंटेक्स documentation में

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name ==[c] %@", myString]; 

अधिक जानकारी।

+0

क्या यह व्हाइटस्पेस को अनदेखा करता है? – CoreCode

+0

आह, माफ करना, मैंने उस हिस्से को याद किया। मुझे व्हाइटस्पेस असंवेदनशीलता के लिए लगता है, आपको MATCHES का उपयोग करना होगा और एक साधारण मिलान स्ट्रिंग के बजाय नियमित अभिव्यक्ति प्रदान करना होगा। dasblinkenlight का जवाब यह दर्शाता है। –

12

आप इस तरह अपने विधेय के साथ नियमित अभिव्यक्ति मिलान का उपयोग कर सकते:

NSString *str = @"test"; 
NSMutableString *arg = [NSMutableString string]; 
[arg appendString:@"\\s*\\b"]; 
[arg appendString:str]; 
[arg appendString:@"\\b\\s*"]; 
NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF matches[c] %@", arg]; 
NSArray *a = [NSArray arrayWithObjects:@" test ", @"test", @"Test", @"TEST", nil]; 
NSArray *b = [a filteredArrayUsingPredicate:p]; 

कोड का टुकड़ा ऊपर के साथ, एक रेगुलर एक्सप्रेशन शुरुआत में और/या अंत में वैकल्पिक कारतूस के साथ तार से मेल खाता है का निर्माण "शब्द सीमा" मार्कर \b से घिरा लक्ष्य शब्द। matches के बाद "मैच केस-असंवेदनशील" का अर्थ है।

यह उदाहरण तारों की एक सरणी का उपयोग करता है; इसे अपने पर्यावरण में काम करने के लिए, SELFentity.name के साथ बदलें।