将NSString分隔为NSArray,但允许引号对单词进行分组

Tim*_*van 7 cocoa objective-c nsstring

我有一个搜索字符串,人们可以使用引号将短语组合在一起,并将其与单个关键字混合使用.例如,像这样的字符串:

"Something amazing" rooster
Run Code Online (Sandbox Code Playgroud)

我想把它分成一个NSArray,这样它就会Something amazing(没有引号)作为一个元素,而另一个元素rooster.

既不符合componentsSeparatedByString也不componentsSeparatedByCharactersInSet符合法案.有没有一种简单的方法可以做到这一点,还是我应该自己编写代码?

Tim*_*van 1

我最终使用了正则表达式,因为我已经在使用 RegexKitLite,并创建了这个 NSString+SearchExtensions 类别。

。H:

//  NSString+SearchExtensions.h
#import <Foundation/Foundation.h>
@interface NSString (SearchExtensions)
-(NSArray *)searchParts;
@end
Run Code Online (Sandbox Code Playgroud)

.米:

//  NSString+SearchExtensions.m
#import "NSString+SearchExtensions.h"
#import "RegexKitLite.h"

@implementation NSString (SearchExtensions)

-(NSArray *)searchParts {
    __block NSMutableArray *items = [[NSMutableArray alloc] initWithCapacity:5];

    [self enumerateStringsMatchedByRegex:@"\\w+|\"[\\w\\s]*\"" usingBlock: ^(NSInteger captureCount,
       NSString * const capturedStrings[captureCount],
       const NSRange capturedRanges[captureCount],
       volatile BOOL * const stop) {

        NSString *result = [capturedStrings[0] stringByReplacingOccurrencesOfRegex:@"\"" withString:@""];

        NSLog(@"Match: '%@'", result);
        [items addObject:result];
    }];        
    return [items autorelease];
}
@end
Run Code Online (Sandbox Code Playgroud)

这将返回一个带有搜索字符串的 NSArray 字符串,删除短语周围的双引号。