我正在构建Twitter iPhone应用程序,它需要检测何时在UITextView中的字符串中输入主题标签或@ -mention。
如何找到" @"之前的所有单词;或"#" NSString中的字符?
感谢您的帮助!
答案 0 :(得分: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);
}
答案 1 :(得分:2)
您可以使用componentsSeparatedByString:将字符串分解为多个(单词),然后检查每个字符串的第一个字符。
或者,如果您需要在用户键入时执行此操作,则可以为文本视图提供委托并实现textView:shouldChangeTextInRange:replacementText:以查看键入的字符。
答案 2 :(得分: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;
}
答案 3 :(得分:0)
if([[test substringToIndex:1] isEqualToString:@"@"] ||
[[test substringToIndex:1] isEqualToString:@"#"])
{
bla blah blah
}
答案 4 :(得分:0)
以下是使用NSPredicate
你可以在UITextView委托中尝试这样的事情:
- (void)textViewDidChange:(UITextView *)textView
{
_words = [self.textView.text componentsSeparatedByString:@" "];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[cd] '@'"];
NSArray* names = [_words filteredArrayUsingPredicate:predicate];
if (_oldArray)
{
NSMutableSet* set1 = [NSMutableSet setWithArray:names];
NSMutableSet* set2 = [NSMutableSet setWithArray:_oldArray];
[set1 minusSet:set2];
if (set1.count > 0)
NSLog(@"Results %@", set1);
}
_oldArray = [[NSArray alloc] initWithArray:names];
}
其中_words,_searchResults和_oldArray是NSArrays。
答案 5 :(得分:0)
使用以下表达式检测字符串中的@或#
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#(\\w+)|@(\\w+)) " options:NSRegularExpressionCaseInsensitive error:&error];