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!
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!
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);
}
componentsSeparatedByString: を使用して文字列を断片 (単語) に分割し、それぞれの最初の文字を確認できます。
または、ユーザーが入力している間にそれを行う必要がある場合は、テキスト ビューのデリゲートを提供し、textView:shouldChangeTextInRange:replacementText: を実装して、入力された文字を表示することができます。
そのための 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;
}
if([[test substringToIndex:1] isEqualToString:@"@"] ||
[[test substringToIndex:1] isEqualToString:@"#"])
{
bla blah blah
}
次の式を使用して、文字列内の @ または # を検出します
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#(\\w+)|@(\\w+)) " options:NSRegularExpressionCaseInsensitive error:&error];