8

I'm building a Twitter iPhone app, and it needs to detect when you enter a hashtag or @-mention within a string in a UITextView.

How do I find all words preceded by the "@" or "#" characters within an NSString?

Thanks for your help!

4

6 に答える 6

22

NSRegularExpressionクラスを #\w+ (\w は単語文字を表します) のようなパターンで使用できます。

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error];
NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, string.length)];
for (NSTextCheckingResult *match in matches) {
    NSRange wordRange = [match rangeAtIndex:1];
    NSString* word = [string substringWithRange:wordRange];
    NSLog(@"Found tag %@", word);
}
于 2012-04-27T15:43:16.090 に答える
2

componentsSeparatedByString: を使用して文字列を断片 (単語) に分割し、それぞれの最初の文字を確認できます。

または、ユーザーが入力している間にそれを行う必要がある場合は、テキスト ビューのデリゲートを提供し、textView:shouldChangeTextInRange:replacementText: を実装して、入力された文字を表示することができます。

于 2012-04-27T15:41:29.973 に答える
1

そのための NSString のカテゴリを作成しました。それは非常に簡単です: すべての単語を検索し、ハッシュタグを取得するために # で始まるすべての単語を返します。

以下の関連するコード セグメント - これらのメソッドとカテゴリの名前も変更します...

@implementation NSString (PA)
// all words in a string
-(NSArray *)pa_words {
    return [self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}

// only the hashtags
-(NSArray *)pa_hashTags {
    NSArray *words = [self pa_words];
    NSMutableArray *result = [NSMutableArray array];
    for(NSString *word in words) {
        if ([word hasPrefix:@"#"])
            [result addObject:word];
    }
    return result;
}
于 2014-03-30T15:53:08.013 に答える
0
if([[test substringToIndex:1] isEqualToString:@"@"] ||
   [[test substringToIndex:1] isEqualToString:@"#"])
{
    bla blah blah
}
于 2012-04-27T15:40:55.963 に答える
0

次の式を使用して、文字列内の @ または # を検出します

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#(\\w+)|@(\\w+)) " options:NSRegularExpressionCaseInsensitive error:&error];
于 2015-12-18T13:12:54.113 に答える