了解如何正确使用NSRegularExpressions

时间:2015-01-09 08:29:49

标签: ios objective-c nsregularexpression

我正在尝试编写一个具有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.

谢谢!

1 个答案:

答案 0 :(得分:1)

模式"#.*?[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"
)