Мога да открия хештегове като този.
+ (NSArray *)getHashArrayWithInputString:(NSString *)inputStr
{
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\w+)" options:0 error:&error];
NSArray *matches = [regex matchesInString:inputStr options:0 range:NSMakeRange(0, inputStr.length)];
NSMutableArray *muArr = [NSMutableArray array];
for (NSTextCheckingResult *match in matches) {
NSRange wordRange = [match rangeAtIndex:1];
NSString* word = [inputStr substringWithRange:wordRange];
NSCharacterSet* notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
if ([word rangeOfCharacterFromSet:notDigits].location == NSNotFound)
{
// newString consists only of the digits 0 through 9
}
else
[muArr addObject:[NSString stringWithFormat:@"#%@",word]];
}
return muArr;
}
Проблемът е, че ако inputStr е "# D & D", той може да открие само #D. Как да направя?
Отговори:
1 за отговор № 1За това с вашия reg израз добавете специален символ, който искате да разрешите.
#(\w+([&]*\w*)*) //To allow #D&D&d...
#(\w+([&-]*\w*)*) //To allow both #D&D-D&...
По същия начин добавяте и други специални символи, които искате.
Така че просто променете регекса си така.
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\w+([&]*\w*)*)" options:0 error:&error];
1 за отговор № 2
Използвах тази lib: https://cocoapods.org/pods/twitter-text
Има TwitterText клас с метод
(NSArray *)hashtagsInText:(NSString *)text checkingURLOverlap (BOOL)checkingURLOverlap
Може да помогне.
Използвах този шушулка преди миналия път, тогава той се получи чудесно. За днес трябва да проверите дали все още е наред. Кажете ми :) Успех