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

下面以iOS oc 代码为例

NSString *test1 = @"

Chapter 1 - 介绍正则表达式

"; //贪婪匹配,会从最开始的 < 匹配到最后的 > NSString *reg1 = @"<.*>"; //非贪婪匹配,但是会匹配出两个结果 NSString *reg2 = @"<.*?>"; //非贪婪匹配,只匹配前面一个

NSString *reg3 = @"<\\w+?>"; NSArray *matchs1 = [test1 matchesWithRegex:reg1]; NSArray *matchs2 = [test1 matchesWithRegex:reg2]; NSArray *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

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

你可能感兴趣的:(正则表达式中的贪婪匹配和非贪婪匹配)