NSRegularexpression多线和堆栈

时间:2013-04-16 10:44:50

标签: ios regex nsregularexpression

我找不到具有平衡标签的正则表达式,一个用于打开,一个用于关闭。 标签必须包含多行文字;和标签是动态的,未在编译时定义

我无法匹配与开始标记对应的结束标记,例如{{home}} - > {{/ home}}和{{hello}} - > {{/你好}};它匹配{{home}}到{{/ hello}} 任何帮助将不胜感激

非常感谢任何帮助

格雷瓜尔

ps:我评论了非工作正则表达式

    NSString * string;
    NSError* error = nil;
    NSRegularExpression* regex;
    NSArray* matches;


    string =
    @" The {{demo}}following tables describe the {{/demo}}character expressions"
    " used by the regular expression to match patterns within "
    " a string,{{home}} the pattern operators that specify how many"
    " times a pattern is matched and additional matching"
    " restrictions, and the last {{/home}}table specifies flags"
    " that can be included in the regular ";


    regex = [NSRegularExpression regularExpressionWithPattern:
             @"\\{\\{demo\\}\\}"
             "(.*)?"
             "\\{\\{(//|/demo)\\}\\}"
                                                      options:NSRegularExpressionDotMatchesLineSeparators
                                                        error:&error];


//    regex = [NSRegularExpression regularExpressionWithPattern:
//             @"\\{\\{.*\\}\\}"
//             "(.*)?"
//             "\\{\\{(//|/.*)\\}\\}"
//                                                      options:NSRegularExpressionDotMatchesLineSeparators
//                                                        error:&error];


    matches = [regex matchesInString:string
                             options:NSRegularExpressionDotMatchesLineSeparators
                               range:NSMakeRange(0, [string length])];

    for ( NSTextCheckingResult* match in matches )
    {
        NSLog(@"### %@ ###", [string substringWithRange:[match range]]);
    }

1 个答案:

答案 0 :(得分:0)

您可以使用此模式

\{\{([^/]*?)\}\}(.*?)\{\{(/\1|//)\}\}
    -------     ----     --------
       |          |          |->matches closing tag having value same as group 1 or //
       |          |->content in group 2
       |->matches the opening tag value and captures it in group1