我正在尝试编写一个具有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.
谢谢!
答案 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" )