5

NSString に特定の単語が含まれているかどうかを検出するにはどうすればよいですかis

NSString が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) { ... }たのですが、単語ではなく文字を検出します。

4

4 に答える 4

15

「単語境界パターン」で「正規表現」検索を使用します\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))
}

スウィフト 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))
}

スウィフト 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])
}

Swift 5 (新しい生の文字列リテラルを使用):

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])
}
于 2013-11-05T09:21:46.233 に答える
1

単語境界文字を一致させるにNSRegularExpressionSearchは、 with オプションを使用します。\b

このような:

NSString *string = @"Here is my string. His isn't a mississippi isthmus. It is...";
if(NSNotFound != [string rangeOfString:@"\\bis\\b" options:NSRegularExpressionSearch].location) {//...}
于 2013-11-05T09:22:09.793 に答える
0

提案されているように、正規表現を使用するか、単語を言語的に分析することができます。

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");
于 2013-11-05T09:42:08.027 に答える