2016-03-26 5 views
1

":"の前後にテキストファイルとグループ情報を解析して、何が何に関連しているかを知ることができます。Objc Regex - グループを含む文字列をパースする

私は、次の

//NSString *pattern = @"\\[(.*?)\\]"; //[] 
//NSString *pattern = @"(\\w+:)"; //word: 
NSString *pattern [email protected]"(\\w+:)\\[(.*?)\\]"; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; 
NSString *input = contents; //contents being the value taken from the text file 

NSMutableArray *matches = [NSMutableArray arrayWithCapacity:[myArray count]]; 
for (NSTextCheckingResult *match in myArray) { 
    //NSUInteger numberOfRanges = [match numberOfRanges]; 
    //NSLog(@"%lu", (unsigned long)numberOfRanges); 
    NSRange matchRange = [match rangeAtIndex:1]; 
    [matches addObject:[input substringWithRange:matchRange]]; 
    NSLog(@"%@", [matches lastObject]); 
} 

「[]」作品や「言葉:」使用していた作品が、私はそれらを一緒に参加するとき、私は戻って何を取得します。

ブラケット(出力)

2016-03-26 09:20:36.302 LevelBuilder[14658:550234] 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 
... 
2016-03-26 09:20:36.304 LevelBuilder[14658:550234] 17,1 

ワード(出力)

2016-03-26 09:18:18.189 LevelBuilder[14464:543898] tiles: 
2016-03-26 09:18:18.189 LevelBuilder[14464:543898] boxes: 
2016-03-26 09:18:18.189 LevelBuilder[14464:543898] goals: 
2016-03-26 09:18:18.189 LevelBuilder[14464:543898] start: 

私はデータが

tiles: 
    [ 
     [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1] 
     ,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1] 
     ,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1] 
     ,[0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1] 
     ,[1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1] 
     ,[1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1] 
     ,[1,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1] 
     ,[1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1] 
     ,[1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1] 
     ,[1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1] 
     ,[1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 
     ,[1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 
     ,[1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 
    ], 
    boxes: [ 
      [5,6],[6,5],[10,5],[11,5],[16,4],[16,5],[16,6],[16,7] 
      ], 
    goals: [ 
      [1,8],[1,9],[1,10],[1,11],[2,10],[2,11],[3,10],[3,11] 
      ], 
    start: [17,1] 
一例であるパターン

NSString *pattern [email protected]"(\\w+:)\\[(.*?)\\]"; 

で何をしないのです

+1

これは明らかではありません。おそらくあなたは['(?s)(\\ w +:)\\ s * \\ [。*?\\](?=、\ r?\ n | $)'](https://regex101.com/r/sT5oA9/1)? –

+0

ありがとう@WiktorStribiżewそれは4つの個人的な一致としてそれらを持っています –

+0

あなたはこの解決策を探していたという意味ですか? –

答えて

1

あなたはそのが[...]を対応して、その後、各「単語」と一致する必要があるので、あなたは2つのキャプチャグループを含む正規表現パターンと「気性」怠惰なドットマッチングパターン意志先読み使用することができます。

@"(?s)(\\w+):\\s*\\[(.*?)\\](?=,\r?\n\\s*\\w+:|$)" 

参照をregex demo

パターンが一致します。

  • (?s) - 改行と一致するように.を有効
  • (\w+): - マッチし、グループ1 1文字以上の英数字にキャプチャし、その後、:
  • \s*と一致 - 0+空白文字
  • \[(.*?)\] - [...]が最後]場合は、グループ1に内部のものですすべてをキャプチャ一致...
  • (?=,\r?\n\s*\w+:|$) - 文字列($)の末尾にカンマを続け、改行した後に0+空白記号を続け、「単語」に続けて:を続けます。