前面介绍*和+时,是匹配尽可能多的字符,称为贪婪匹配。但有时候需要匹配尽可能少的字符,称为懒惰匹配,方法是在贪婪匹配的后面添加一个问号。
常见的懒惰匹配格式如表3-5中所示。
表3-5 懒惰匹配
| 懒惰匹配格式 | 说 明 |
|---|---|
| *? | 重复任意次,但尽可能少重复 |
| +? | 重复1次或更多次,但尽可能少重复 |
| ?? | 重复0次或1次,但尽可能少重复 |
| {n,m}? | 重复n到m次,但尽可能少重复 |
| {n,}? | 重复n次以上,但尽可能少重复 |
下面给定原始字符串,分别使用贪婪匹配和懒惰匹配比较匹配结果。
code.matlab
>> a=' 123 abc53 59wt ';
>> m=regexp(a,'\s.+\s','match')
m =
1×1 cell 数组
{' 123 abc53 59wt '}
正则表达式'\s.+\s'中没有?,此为贪婪匹配,在两个空白符之间匹配尽可能多的字符,所以匹配结果是整个字符串。
code.matlab
>> m=regexp(a,'\s.+?\s','match')
m =
1×3 cell 数组
{' 123 '} {' abc53 '} {' 59wt '}
正则表达式'\s.+?\s'中+后面有?,此为懒惰匹配,在两个空白符之间匹配尽可能少的字符,所以匹配结果是空格间隔的三个子字符串。