正则表达式中的贪婪匹配和非贪婪匹配

2019-07-16  本文已影响0人  格雷s

下面以iOS oc 代码为例

NSString *test1 = @"<H1>Chapter 1 - 介绍正则表达式</H1>";
    //贪婪匹配,会从最开始的 < 匹配到最后的 >
    NSString *reg1 = @"<.*>";
    //非贪婪匹配,但是会匹配出两个结果
    NSString *reg2 = @"<.*?>";
    //非贪婪匹配,只匹配前面一个<H1>
    NSString *reg3 = @"<\\w+?>";
    NSArray<NSTextCheckingResult*> *matchs1 = [test1 matchesWithRegex:reg1];
    NSArray<NSTextCheckingResult*> *matchs2 = [test1 matchesWithRegex:reg2];
    NSArray<NSTextCheckingResult*> *matchs3 = [test1 matchesWithRegex:reg3];
    for (NSTextCheckingResult *match in matchs1) {
        NSLog(@"matchs1***%@",NSStringFromRange(match.range));
    }
    
    for (NSTextCheckingResult *match in matchs2) {
        NSLog(@"matchs2***%@",NSStringFromRange(match.range));
    }
    
    for (NSTextCheckingResult *match in matchs3) {
        NSLog(@"matchs3***%@",NSStringFromRange(match.range));
    }

输出结果


image.png

通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪心"表达式转换为"非贪心"表达式或者最小匹配。

上一篇下一篇

猜你喜欢

热点阅读