1

高低を検索しましたが、Objective C で // および /* */ コメントを削除するための適切な正規表現が見つかりません。

ただし、Objective C に移植したC# から行コメントを削除するための Regexという優れた回答を見つけました。

エレガントでもきれいに書かれているわけでもありません。改善方法についてフィードバックをいただければ幸いです。回答として投稿し、誰かの役に立てば幸いです。

4

1 に答える 1

4

わかりました-ここに行きます:

+ (NSString *) stripComments:(NSString *)text{

    NSString *blockComments = @"/[*](.*?)[*]/";
    NSString *lineComments = @"//(.*?)\r?\n";
    NSString *strings = @"\"((\\[^\n]|[^""\n])*)\"";
    NSString *verbatimStrings = @"@(\"[^\"]*\")+";
    NSMutableArray *removes = [NSMutableArray array];

    NSError *error = NULL;
    NSRegularExpression *regexComments = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"%@|%@|%@|%@",blockComments,lineComments,strings,verbatimStrings] options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators
                                                                              error:&error];

    NSArray* matches = [regexComments matchesInString:text options:0 range:NSMakeRange(0, text.length)];

    for (NSTextCheckingResult* match in matches){

        NSString *outer = [text substringWithRange:[match range]];
        if([outer hasPrefix:@"/*"] || [outer hasPrefix:@"//"]){
            [removes addObject:outer];
        }
    }

    for(NSString *match in [removes valueForKeyPath:@"@distinctUnionOfObjects.self"]){
        text = [text stringByReplacingOccurrencesOfString:match withString:@""];
    }

    return text;
}
于 2013-04-12T20:09:26.013 に答える