了解如何正确使用 NSRegularExpressions

Understanding how to use NSRegularExpressions correctly

我正在尝试编写一个具有 NSString 的函数并对其进行解析并返回一个标签数组。

标签的定义是任何以 # 开头并且在 # 之后仅包含字母数字字符的 nsstring 文本。

这是正确的吗?

#.*?[A-Za-z0-9]

我想使用 matchesInString:options:range:但需要一些帮助。

我的函数是:

- (void) getTags
{
    NSString* str = @"This is my string and a couple of #tags for #you.";

    // Range is 0 to 48 (full length of string)

    // NSArray should contain #tags and #you only.

谢谢!

模式 "#.*?[A-Za-z0-9]" 匹配后跟零个或多个的 # 在集合 [A-Za-z0-9] 不是 的字符。你可能想要的是

NSString *pattern = @"#[A-Za-z0-9]+";

您可以使用该模式创建正则表达式:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];

并枚举字符串中的所有匹配项:

NSString *string = @"abc #tag1 def #tag2.";
NSMutableArray *tags = [NSMutableArray array];

[regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, string.length)
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                         NSRange range = [result range];
                         NSString *tag = [string substringWithRange:range];
                         [tags addObject:tag];
                     }];

NSLog(@"%@", tags);

输出:

(
    "#tag1",
    "#tag2"
)