擅长:python、mysql、java
<p>从某种意义上说,比赛的开始总是贪婪的。这是因为引擎尝试在主题字符串中从左到右进行匹配。遇到第一个<code><a href="</code>,这很好,然后引擎继续使用<code>.+?</code>消耗所有内容,直到匹配完成(由于<code>.+?</code>,它会尽快停止)。但它并没有尽可能地把比赛开始的越右越好,因为比赛很好。因此,可以说使用<code>?</code>使匹配的<em>结束</em>不清晰(获取匹配的第一个可能的结束),但是匹配的<em>开始</em>将始终是贪婪的(无论您如何尝试使其取消锐化,匹配始终从最左边的可能位置开始)。在</p>
<p>这就是为什么通常有一个更好的方法来代替不整洁的重复:从重复中排除分隔符:</p>
<pre><code><a href="([^"]*)" class="nextpostslink">
</code></pre>
<p>这永远不会超过结束符<code>"</code>,因此不必担心属性或标记之外的任何内容都将成为匹配的一部分。在</p>
<p>无论如何,让我补充一下,<a href="https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454">that you should not use regular expressions to parse HTML.</a>如果使用<code>'</code>而不是{<cd5>}(就像在给定示例中的第二个锚标记中那样)呢?如果属性之间有多个空格怎么办?如果属性多于<code>href</code>和<code>class</code>怎么办?如果<code>class</code>属性列在<code>href</code>属性之前怎么办?在</p>
<p>jdotjdot的答案有一个很好的例子,说明了如何在Python中正确地执行它。在</p>