2011-11-09 37 views
0

解析類似於perl正則表達式的數據行的最有效方法是什麼?例如,如果數據線爲:,我可以用這個Perl表達式解析數據「ABCD名123-123-0000!」: data =~ /([A-z]+)!([A-F]+)!([0-9]+)-(.+)/可可解析像perl正則表達式的數據行

這將導致$1=username, $2=ABCD, $3=123, $4=123-0000

有沒有一種方法在可可中做到這一點?甚至可以預先定義4個NSString變量的解決方案都很好。

回答

0

考慮以下模式:

username!tag!password 

而且下列要求:

  • 用戶名只能包含A-Za-z
  • 該標籤可能只包含A-F
  • 密碼可能只包含0-9-

一種方法來提取和驗證值:

NSString *input = @"username!ABCD!123-123-0000"; 

NSArray *split = [input componentsSeparatedByString:@"!"]; 

NSString *user = [split objectAtIndex:0]; 
NSString *tag = [split objectAtIndex:1]; 
NSString *pass = [split objectAtIndex:2]; 

NSCharacterSet *checkUser = [NSCharacterSet letterCharacterSet]; 
NSCharacterSet *checkTag = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEF"]; 
NSCharacterSet *checkPass = [NSCharacterSet characterSetWithCharactersInString:@"-"]; 

if ([[user stringByTrimmingCharactersInSet:checkUser] length] == 0) NSLog(@"User \"%@\" is valid.",user); 
if ([[tag stringByTrimmingCharactersInSet:checkTag ] length] == 0) NSLog(@"Tag \"%@\" is valid.", tag); 
if ([[pass stringByTrimmingCharactersInSet:checkPass] length] == 0) NSLog(@"Pass \"%@\" is valid.",pass); 

輸出:

User "username" is valid. 
Tag "ABCD" is valid. 
Pass "123-123-0000" is valid. 

您也可以考慮使用NSScannerNSRegularExpression