目标C中的正则表达式

Cle*_*rem 4 regex string objective-c ios

我想只从以下字符串中提取名称

bob!33@localhost @clement!17@localhost jack!03@localhost
Run Code Online (Sandbox Code Playgroud)

并创建一个数组[@"bob", @"clement", @"jack"].

我已经尝试过NSString,componentsseparatedbystring:但它没有按预期工作.所以我打算去regEx.

  1. 如何在范围之间提取字符串并使用目标C中的regEx将其添加到数组中?
  2. 初始字符串可能包含500多个名称,如果我使用regEx操作字符串会不会出现性能问题?

Jan*_*mal 5

您可以在没有正则表达式的情况下执行此操作(假设!符号在您的所有单词中都有统一的模式),

NSString *names = @"bob!33@localhost @clement!17@localhost jack!03@localhost";
NSArray *namesarray = [names componentsSeparatedByString:@" "];
NSMutableArray *desiredArray = [[NSMutableArray alloc] initWithCapacity:0];
[namesarray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSRange rangeofsign = [(NSString*)obj rangeOfString:@"!"];
    NSString *extractedName = [(NSString*)obj substringToIndex:rangeofsign.location];
    [desiredArray addObject:extractedName];
}];
NSLog(@"%@",desiredArray);
Run Code Online (Sandbox Code Playgroud)

以上NSLog的输出将是

(
    bob,
    "@clement",
    jack
)
Run Code Online (Sandbox Code Playgroud)

如果您仍想在上面的字符串中删除@符号,则可以随时替换任何字符串中的特殊字符,以进行检查

如果您需要进一步的帮助,可以随时发表评论


Ret*_*tro 5

NSMutableArray* nameArray = [[NSMutableArray alloc] init];
NSArray* youarArray = [yourString componentsSeparatedByString:@" "];
for(NSString * nString in youarArray) {
   NSArray* splitObj = [nString componentsSeparatedByString:@"!"];
   [nameArray addObject:[splitObj[0]]];
}    
NSLog(@"%@", nameArray);
Run Code Online (Sandbox Code Playgroud)