关于Java获取超链接正则表达式的有关问题

关于Java获取超链接正则表达式的问题
对于如下的字符串:
<a>第01季</a></li></ul><ul class=bnt_o_i4 clearfix style=display:none; format=MP4><li format=MP4 season=2><a>第02季</a>

如果使用正则表达式
String regex="<a.*?/a>";
匹配出来的是一个个的超链接
<a>第01季</a>
<a>第02季</a>

但是如果用String regex="<a.*/a>";
匹配出来的就是原来的一整段字符串。

那么第一个正则表达式中的?是做什么用的。

groovy代码如下:
import java.util.regex.*;

String str="<a>第01季</a></li></ul><ul class=bnt_o_i4 clearfix style=display:none; format=MP4><li format=MP4 season=2><a>第02季</a>"

//String patternString = "<a.*/a>"
String patternString = "<a.*?/a>"
Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE)
Matcher matcher;
String href;

matcher = pattern.matcher(str)
while (matcher.find()) {
href=matcher.group()
println href
println ""
}


------解决方案--------------------
a.*是最大匹配,就是找最长的符合条件的字符串
a.*?是最小匹配,就是找最短的符合条件的
------解决方案--------------------
     首先,*的原本意思是匹配0次或多次出现的情况,?的原本意思是匹配0次或一次出现的情况。
   出现上边问题的原因是因为*和+都是所谓的“贪婪型”元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止的,它们会尽可能的从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到碰到第一个匹配时为止。
    在不需要这种“贪婪行为”的时候,我们可以使用这些元字符的懒惰版本,懒惰型元字符的写法很简单,只要给贪婪型元字符加上一个?后缀即可。如下:
    *   对应的懒惰型:  *?
    +  对应的懒惰型:  +?
    {n, }对应的懒惰型: {n, }?