擅长:python、mysql、java
<p>这里的其他答案假定您有一个支持非贪婪匹配的regex引擎,这是Perl 5中引入的一个扩展,并被广泛复制到其他现代语言中;但它决不是无处不在的。</p>
<p>许多旧的或更保守的语言和编辑器只支持传统的正则表达式,它们没有控制重复运算符<code>*</code>贪婪的机制-它总是匹配尽可能长的字符串。</p>
<p>接下来的诀窍是首先限制允许匹配的内容。你似乎在寻找的不是<code>.*</code></p>
<pre><code>[^>]*
</code></pre>
<p>它仍然尽可能多地匹配<em>某物</em>;但是<em>某物</em>不仅仅是<code>.</code>“任何字符”,而是“任何不是<code>></code>的字符”。</p>
<p>根据您的应用程序,您可以启用或不希望启用允许“任何字符”包含换行符的选项。</p>
<p>即使正则表达式引擎支持非贪婪匹配,也最好说明您的实际意思。如果这个<em>是</em>你的意思,你可能应该这么说,而不是依赖非贪婪匹配(希望,可能)做我的意思。</p>
<p>例如,在通配符后面有尾随上下文的正则表达式(如<code>.*?><br/></code>)将跳过任何嵌套的<code>></code>,直到找到尾随上下文(这里是<code>><br/></code>),即使这需要跨接多个<code>></code>实例和换行(如果允许的话),其中<code>[^>]*><br/></code>(如果必须显式禁止换行,甚至是<code>[^\n>]*><br/></code>)显然不能也不会那样做。</p>
<p>当然,如果您需要处理<code><img title="quoted string with > in it" src="other attributes"> and perhaps <img title="nested tags"></code>,这仍然不是您想要的,但是在这一点上,您应该最终放弃使用正则表达式来处理这一点,就像我们一开始就告诉您的那样。</p>