擅长:python、mysql、java
<p>你不需要这么复杂的正则表达式来获得标题。使用</p>
<pre><code>Title:\s*(.*?)(?=\s*<br/?>)
</code></pre>
<p>见<a href="https://regex101.com/r/kV2eD2/1" rel="nofollow noreferrer">demo</a></p>
<p>我们将<code>Title:</code>,然后将空格<code>\s*</code>,然后将tp <code><br/></code>上的任何字符与<code>(.*?)(?=\s*<br/?>)</code>匹配。你知道吗</p>
<p>至于<code>(?:(?!<br>).)+</code>,这意味着<em>捕获一个或多个不跟在<code><br></code></em>后面的字符。有一个<a href="https://stackoverflow.com/questions/406230/regular-expression-to-match-text-that-doesnt-contain-a-word">SO post where this construction is explained in detail</a>。你知道吗</p>
<p>这里是来自<a href="https://regex101.com/r/kV2eD2/2" rel="nofollow noreferrer">regex101</a>(转到<em>Regex Debugger</em>选项卡,然后单击右侧的<code>+</code>)的图像,显示了该构造正在执行的操作(检查下一个字符是否是<code><br></code>,如果不是,则消耗和回溯,等等):</p>
<p><img src="https://i.stack.imgur.com/AvT1b.png" alt="enter image description here"/></p>
<p>关于正则表达式中有多少捕获组的问题,<code>Title: ((?:(?!<br>).)+)</code>有1个捕获组(<code>((?:(?!<br>).)+)</code>)和1个非捕获组(<code>(?:(?!<br>).)</code>)。你知道吗</p>