Hallo Sergei Z
It's very hard to explain without a white board, but i'll try my best.
when we say .*? than we accept anything. if our source is the following
<td class="cool" ></td><td class="cool" ></td><td class="cool" ></td><td class="cool" ></td>
and the regex is <td.*?>Sergei Z</td> then the regex will scan the following
<td class="cool" > No match!
<td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" ></td><td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" ></td><td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" ></td><td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" ></td><td class="cool" ></td><td class="cool" > No match!
while using <td[^>]*> will result in
<td class="cool" > No match!
<td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" ></td><td class="cool" > No match!
<td class="cool" ></td><td class="cool" ></td><td class="cool" ></td><td class="cool" > No match!
now lets say you use .*? 4 times in the regex, that's mean 4 power 4 power optional matches, that will fail at the end, that can be long precess.
"When the only tool you have is an hammer, everything tends to look like nails" A. Maslow