正则表达式里面 .* 和 .*? 有什么区别?
在正则表达式的基本语法中,有如下规定:
.
匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 'n' 在内的任何字符,请使用像"(.|\n)"的模式。
*
匹配前面的子表达式零次或多次。例如,zo 能匹配 "z" 以及 "zoo"。 等价于{0,}。
?
匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。
表达式 .*
就是单个字符匹配任意次,即贪婪匹配。 表达式 .*?
是满足条件的情况只匹配一次,即最小匹配。
*
限定符是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?
就可以实现非贪婪或最小匹配。
比如:<H1>MyBatis框架</H1>
使用/<.*>/
匹配的结果为:H1>MyBatis框架</H1。
使用/<.*?>/
匹配结果为:H1。