检测主题标签包括&在标签中

时间:2017-02-09 07:16:25

标签: ios objective-c

我可以检测到这样的标签。

+ (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。我该怎么办?

2 个答案:

答案 0 :(得分: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 :(得分:1)

我正在使用这个lib: https://cocoapods.org/pods/twitter-text

有方法的TwitterText类 (NSArray *)hashtagsInText:(NSString *)text checkingURLOverlap (BOOL)checkingURLOverlap它可以提供帮助。

我上次使用这个pod,然后它运行得很好。今天你需要检查它是否还可以。让我知道:)祝你好运