检测NSString中的整个单词

如何检测一个NSString是否包含一个特定的单词,例如is

如果NSString是Here is my string. His isn't a mississippi isthmus. It is... Here is my string. His isn't a mississippi isthmus. It is... Here is my string. His isn't a mississippi isthmus. It is... ? 该方法应该检测到单词is并返回YES

但是,如果NSString是His isn't a mississipi isthmus ,它应该返回NO

我尝试使用if ([text rangeOfString:@"is" options:NSCaseInsensitiveSearch].location != NSNotFound) { ... }但它检测字符而不是单词。

使用“正则expression式”search与“单词边界模式” \b

 NSString *text = @"Here is my string. His isn't a mississippi isthmus. It is..."; NSString *pattern = @"\\bis\\b"; NSRange range = [text rangeOfString:pattern options:NSRegularExpressionSearch|NSCaseInsensitiveSearch]; if (range.location != NSNotFound) { ... } 

这也适用于"Is it?""It is!" ,这个词不包含空格。

Swift 2中,这将是

 let text = "Here is my string. His isn't a mississippi isthmus. It is..." let pattern = "\\bis\\b" if let range = text.rangeOfString(pattern, options: [.RegularExpressionSearch, .CaseInsensitiveSearch]) { print ("found:", text.substringWithRange(range)) } 

Swift 3:

 let text = "Here is my string. His isn't a mississippi isthmus. It is..." let pattern = "\\bis\\b" if let range = text.range(of: pattern, options: [.regularExpression, .caseInsensitive]) { print ("found:", text.substring(with: range)) } 

Swift 4:

 let text = "Here is my string. His isn't a mississippi isthmus. It is..." let pattern = "\\bis\\b" if let range = text.range(of: pattern, options: [.regularExpression, .caseInsensitive]) { print ("found:", text[range]) } 

使用NSRegularExpressionSearch选项与\b匹配单词边界字符。

喜欢这个:

 NSString *string = @"Here is my string. His isn't a mississippi isthmus. It is..."; if(NSNotFound != [string rangeOfString:@"\\bis\\b" options:NSRegularExpressionSearch].location) {//...} 

关于什么

 if ([text rangeOfString:@" is " options:NSCaseInsensitiveSearch].location != NSNotFound) { ... } 

您可以按照build议使用正则expression式,也可以在语言上分析单词:

 NSString *string = @"Here is my string. His isn't a mississippi isthmus. It is..."; __block BOOL containsIs = NO; [string enumerateLinguisticTagsInRange:NSMakeRange(0, [string length]) scheme:NSLinguisticTagSchemeTokenType options:NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitOther orthography:nil usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop){ NSString *substring = [string substringWithRange:tokenRange]; if (containsIs) if ([substring isEqualToString:@"n't"]) containsIs = NO; // special case because "isn't" are actually two separate words else *stop = YES; else containsIs = [substring isEqualToString:@"is"]; }]; NSLog(@"'%@' contains 'is': %@", string, containsIs ? @"YES" : @"NO");