dre*_*ves 3 regex cocoa command-line parsing objective-c
这是一段代码,用于获取input表示命令行的字符串(NSString或NSAttributedString),并将其解析为两个字符串,即命令cmd和参数args:
NSString* cmd = [[input mutableCopy] autorelease];
NSString* args = [[input mutableCopy] autorelease];
NSScanner* scanner = [NSScanner scannerWithString:[input string]];
[scanner scanUpToCharactersFromSet:[NSCharacterSet 
                                    whitespaceAndNewlineCharacterSet] 
                        intoString:&cmd];
if (![scanner scanUpToString:@"magicstring666" intoString:&args]) args = @"";
这似乎有效,但魔术字符串是一个非常荒谬的黑客.而且,我完全不确定我是否正确使用自动释放功能.
补充:解决方案对初始空格也应该是健壮的.另外,我最初的输入字符串叫做both input和inStr.对不起,这个混乱.
补充:我相信上面的代码有一点是正确的,到目前为止答案不是args不应该有任何初始空格.
Chu*_*uck 10
NSString *cmd;
NSScanner *scanner = [NSScanner scannerWithString:[inStr string]];
[scanner scanUpToCharactersFromSet:[NSCharacterSet
                                    whitespaceAndNewlineCharacterSet] 
                        intoString:&cmd];
NSString *args = [[scanner string] substringFromIndex:[scanner scanLocation]];
您的自动释放是正常的,但首先分配字符串是不必要的,因为NSScanner通过引用返回一个新字符串.由于NSScanner的charactersToBeSkipped默认包含空格,因此不应该被初始空格绊倒.
像这样的东西?
int index = [input rangeOfString:@" "].location;
NSString *cmd = [input substringToIndex:index]);
NSString *args = [input substringFromIndex:index + 1]);
| 归档时间: | 
 | 
| 查看次数: | 18040 次 | 
| 最近记录: |