擅长:python、mysql、java
<blockquote>
<p>Can someone explain why java's regex engine goes into catastrophic mode on this regex?</p>
</blockquote>
<p>对于字符串:</p>
<pre><code>'pão de açúcar itaucard mastercard platinum SUSTENTABILIDADE])
</code></pre>
<p>看来,正则表达式的这一部分将是问题所在:</p>
^{pr2}$
<p>匹配第一个<code>'</code>,然后无法匹配结束的<code>'</code>,从而回溯嵌套量词的所有组合。在</p>
<p>如果允许regex回溯,它将回溯(失败时)。使用原子群和/或所有格量词来防止这种情况发生。在</p>
<hr/>
<p>顺便说一句,你不需要那个正则表达式中的大部分转义。在字符类(<code>[]</code>)中,唯一需要转义的是字符<code>^-]</code>。但通常你可以定位它们,这样它们也就不需要逃跑了。当然,<code>\</code>和任何你所使用的字符串仍然需要(双)转义。在</p>
<pre><code>"^(?:[^]['\"\\s~:/@#|^&(){}\\\\][^][\"\s~:/@#|^&(){}\\\\]*|\"(?:[^\"]++|\"\")++\"|'(?:[^']++|'')++')"
</code></pre>