python re expression confusion
<p>When reading book: web scraping with python, the re expression confused me,</p>

<blockquote>
<pre><code>webpage_regex = re.compile('&lt;a[^&gt;]+href=["\'](.*?)["\']', re.IGNORECASE)
</code></pre>
</blockquote>

<p>And a link in usually looks like:</p>

<pre><code>&lt;a href="/view/Afghanistan-1"&gt;
</code></pre>

<p>My confusion is that:</p>

<ol>
<li><p>Since <code>[^&gt;]</code> means no <code>&gt;</code>, why it followed by a <code>+</code>?  This <code>+</code> seems useless.</p></li>
<li><p>The confusion is that <code>(.*?)</code> , since <code>*</code> means repeat 0 or more times, why it needs <code>?</code> to repeat <code>*</code> again?</p></li>
</ol>

<ol>
<li><p><code>[&gt;]+</code> matches any other attributes and their corresponding values inside the tag.</p></li>
<li><p><code>*?</code> matches between zero and unlimited times, as few times as possible, expanding as needed. so it will only capture the text that would before the NEXT <code>["\']</code></p></li>
</ol>

python python-2.7