【问题标题】:Detect hashtags including & in hashtag检测包括 & 在内的主题标签
【发布时间】:2017-02-09 07:16:25
【问题描述】:

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

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

【问题讨论】:

标签: ios objective-c


【解决方案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];

【讨论】:

  • D&D&D 怎么样? :) 提示,括号会有所帮助。
  • @Sulthan Thanx 的建议,也编辑答案。
  • 你能告诉我我应该使用什么模式来检测“@”并且只检测它后面的数字吗?
【解决方案2】:

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

有一个带有方法的 TwitterText 类 (NSArray *)hashtagsInText:(NSString *)text checkingURLOverlap (BOOL)checkingURLOverlap 有帮助。

去年我用过这个吊舱,然后效果很好。今天,您需要检查它是否仍然正常。让我知道:) 祝你好运

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2023-04-05
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多