Ios 合并两个NSRegularExpression

Ios 合并两个NSRegularExpression,ios,objective-c,Ios,Objective C,我想将stringWithHashtags中的每个单词添加到以@和#开头的attString中。我认为最简单的方法是合并两个NSRegularExpression,然后将其分配给阵列。实际上,我是这样分配的: NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error]; NSRegularExpression *rege

我想将
stringWithHashtags
中的每个单词添加到以
@
#
开头的
attString
中。我认为最简单的方法是合并两个
NSRegularExpression
,然后将其分配给阵列。实际上,我是这样分配的:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error];

NSRegularExpression *regexM = [NSRegularExpression regularExpressionWithPattern:@"@(\\w+)" options:0 error:&error];

NSArray *matches = [regex matchesInString:stringWithHashtags options:0 range:NSMakeRange(0, stringWithHashtags.length)];
matches = [regexM matchesInString:stringWithHashtags options:0 range:NSMakeRange(0, stringWithHashtags.length)];
在结果中,只有提到的内容是蓝色的

以下是我的完整方法:

-(NSMutableAttributedString*)detectHashtags:(NSString *)stringWithHashtags{

    NSError *error = nil;

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"#(\\w+)" options:0 error:&error];

    NSRegularExpression *regexTag = [NSRegularExpression regularExpressionWithPattern:@"@(\\w+)" options:0 error:&error];

    NSArray *matches = [regex matchesInString:stringWithHashtags options:0 range:NSMakeRange(0, stringWithHashtags.length)];
    matches = [regexTag matchesInString:stringWithHashtags options:0 range:NSMakeRange(0, stringWithHashtags.length)];

    NSMutableAttributedString *attString= [[NSMutableAttributedString alloc] initWithString:stringWithHashtags];

    NSInteger stringLength= [stringWithHashtags length];

    for (NSTextCheckingResult *match in matches) {

        NSRange wordRange = [match rangeAtIndex:0];
        NSString* word = [stringWithHashtags substringWithRange:wordRange];

        UIColor *foregroundColor=[UIColor blueColor];
        [attString addAttribute:NSForegroundColorAttributeName value:foregroundColor range:wordRange];

    }
    UIFont *font=[UIFont fontWithName:@"Helvetica" size:13.0f];
    [attString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, stringLength)];

    return attString;
}

是否可以以某种方式合并
regex
regexTag

您是否考虑过合并正则表达式模式而不是
NSRegularExpression
实例

给定re1和re2,则模式(re1)|(re2)匹配其中任何一个。例如,#|@匹配一个#或一个@。您还可以使用[characters in set]匹配一组字符中的一个


HTH

好主意,我将
regular expression with pattern:@“#”(\\w+)
更改为
regular expression with pattern:@“#|@”
,几乎成功了。它检测到相同的符号,但不知何故,只有
@
&
是彩色的,而不是整个单词。你知道我该怎么修吗?为什么你错过了剩下的图案?模式是根据子模式构建的,例如“b(a | e)d”匹配“bad”或“bed”。我从未使用过这种东西,这种模式并不熟悉。我将其更改为带有模式的正则表达式:@“#(\\w+)|@(\\w+)”,效果很好。有没有更好的解决方案或是正确的方法?您的模式很好-很有效!还有其他方法吗?从您第一次尝试的内容开始,您可以使用“(#|@)(\\w+”,或者如果您想按设定的方式进行,则“[#@](\\w+”)即可。按照
NSRegularExpression
文档进行操作,它们将链接到您可以使用的所有基本模式以及如何组装这些模式。