了解如何正确使用 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"
)
我正在尝试编写一个具有 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" )