Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you detect words that start with “@” or “#” within an NSString?

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!

like image 953
Ramon Avatar asked Apr 27 '12 15:04

Ramon


2 Answers

You can use NSRegularExpression class with a pattern like #\w+ (\w stands for word characters).

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);
}
like image 55
Vadim Yelagin Avatar answered Oct 11 '22 20:10

Vadim Yelagin


You can break a string into pieces (words) by using componentsSeparatedByString: and then check the first character of each one.

Or, if you need to do it while the user is typing, you can provide a delegate for the text view and implement textView:shouldChangeTextInRange:replacementText: to see typed characters.

like image 34
Phillip Mills Avatar answered Oct 11 '22 19:10

Phillip Mills